Merge branch 'master' into issues/1726

This commit is contained in:
Jonathan Budzenski 2015-09-10 16:27:53 -05:00
commit b1d40dcced
59 changed files with 558 additions and 5839 deletions

View file

@ -1 +1 @@
iojs-v2.5
0.12.7

View file

@ -1,5 +1,5 @@
language: node_js
node_js: 'iojs-v2.5'
node_js: '0.12.7'
install:
- npm install -g npm@3.2
- npm install

View file

@ -35,10 +35,10 @@ Please make sure you have signed the [Contributor License Agreement](http://www.
npm install
```
- Start elasticsearch, you can use [esvm](https://github.com/simianhacker/esvm) to make that easier.
- Start elasticsearch
```sh
grunt esvm:dev:keepalive
npm run elasticsearch
```
- Start the development server.
@ -47,6 +47,19 @@ Please make sure you have signed the [Contributor License Agreement](http://www.
./bin/kibana --dev
```
#### `config/kibana.dev.yml`
The `config/kibana.yml` file stores user configuration directives. Since this file is checked into source control, however, developer preferences can't be saved without the risk of accidentally committing the modified version. To make customizing configuration easier during development, the Kibana CLI will look for a `config/kibana.dev.yml` file if run with the `--dev` flag. This file behaves just like the non-dev version and accepts any of the [standard settings](https://www.elastic.co/guide/en/kibana/master/kibana-server-properties.html).
The `config/kibana.dev.yml` file is very commonly used to store some opt-in/**unsafe** optimizer tweaks which can significantly increase build performance. Below is a commonly used `config/kibana.dev.yml` file, but additional options can be found [in #4611](https://github.com/elastic/kibana/pull/4611#issue-99706918).
```yaml
optimize:
sourceMaps: '#cheap-source-map' # options -> http://webpack.github.io/docs/configuration.html#devtool
unsafeCache: true
lazyPrebuild: false
```
#### Linting
A note about linting: We use [eslint](http://eslint.org) to check that the [styleguide](STYLEGUIDE.md) is being followed. It runs in a pre-commit hook and as a part of the tests, but most contributors integrate it with their code editors for real-time feedback.

View file

@ -1,4 +1,4 @@
require('babel/register')(require('./src/optimize/babelOptions'));
require('babel/register')(require('./src/optimize/babelOptions').node);
module.exports = function (grunt) {
// set the config once before calling load-grunt-config
@ -30,7 +30,7 @@ module.exports = function (grunt) {
}
}()),
nodeVersion: '2.5.0',
nodeVersion: grunt.file.read('.node-version').trim(),
meta: {
banner: '/*! <%= package.name %> - v<%= package.version %> - ' +

View file

@ -39,7 +39,7 @@ For the daring, snapshot builds are available. These builds are created after ea
| platform | | |
| --- | --- | --- |
| OSX | [tar](http://download.elastic.co/kibana/kibana/kibana-4.2.0-snapshot-darwin-x64.tar.gz) | [zip](http://download.elastic.co/kibana/kibana/kibana-4.2.0-snapshot-darwin-x64.zip) |
| Linux x64 | [tar](http://download.elastic.co/kibana/kibana/kibana-4.2.0-snapshot-linux-x64.tar.gz) | [zip](http://download.elastic.co/kibana/kibana/kibana-4.2.0-snapshot-linux-x64.zip) |
| Linux x86 | [tar](http://download.elastic.co/kibana/kibana/kibana-4.2.0-snapshot-linux-x86.tar.gz) | [zip](http://download.elastic.co/kibana/kibana/kibana-4.2.0-snapshot-linux-x86.zip) |
| Windows | [tar](http://download.elastic.co/kibana/kibana/kibana-4.2.0-snapshot-windows.tar.gz) | [zip](http://download.elastic.co/kibana/kibana/kibana-4.2.0-snapshot-windows.zip) |
| OSX | [tar](http://download.elastic.co/kibana/kibana-snapshot/kibana-4.2.0-snapshot-darwin-x64.tar.gz) | [zip](http://download.elastic.co/kibana/kibana-snapshot/kibana-4.2.0-snapshot-darwin-x64.zip) |
| Linux x64 | [tar](http://download.elastic.co/kibana/kibana-snapshot/kibana-4.2.0-snapshot-linux-x64.tar.gz) | [zip](http://download.elastic.co/kibana/kibana-snapshot/kibana-4.2.0-snapshot-linux-x64.zip) |
| Linux x86 | [tar](http://download.elastic.co/kibana/kibana-snapshot/kibana-4.2.0-snapshot-linux-x86.tar.gz) | [zip](http://download.elastic.co/kibana/kibana-snapshot/kibana-4.2.0-snapshot-linux-x86.zip) |
| Windows | [tar](http://download.elastic.co/kibana/kibana-snapshot/kibana-4.2.0-snapshot-windows.tar.gz) | [zip](http://download.elastic.co/kibana/kibana-snapshot/kibana-4.2.0-snapshot-windows.zip) |

View file

@ -2,6 +2,7 @@ This is a collection of style guides for Kibana projects. The include guides for
- [JavaScript](#javascript-style-guide)
- [Kibana Project](#kibana-style-guide)
- [Html](#html-style-guide)
# JavaScript Style Guide
@ -855,6 +856,24 @@ require('ui/routes')
});
```
# Html Style Guide
### Multiple attribute values
When a node has multiple attributes that would cause it to exceed the line character limit, each attribute including the first should be on its own line with a single indent. Also, when a node that is styled in this way has child nodes, there should be a blank line between the openening parent tag and the first child tag.
```
<ul
attribute1="value1"
attribute2="value2"
attribute3="value3">
<li></li>
<li></li>
...
</ul>
```
# Attribution
This JavaScript guide forked from the [node style guide](https://github.com/felixge/node-style-guide) created by [Felix Geisendörfer](http://felixge.de/) and is

View file

@ -19,7 +19,7 @@
# kibana.defaultAppId: "discover"
# If your Elasticsearch is protected with basic auth, this is the user credentials
# used by the Kibana server to perform maintence on the kibana_index at statup. Your Kibana
# used by the Kibana server to perform maintenance on the kibana_index at startup. Your Kibana
# users will still need to authenticate with Elasticsearch (which is proxied through
# the Kibana server)
# elasticsearch.username: user

View file

@ -5,8 +5,16 @@ Kibana is a web application that you access through port 5601. All you need to d
machine where Kibana is running and specify the port number. For example, `localhost:5601` or
`http://YOURDOMAIN.com:5601`.
When you access Kibana, the Discover page loads by default with the default index pattern selected. The time filter is
set to the last 15 minutes and the search query is set to match-all (\*).
When you access Kibana, the <<discover,Discover>> page loads by default with the default index pattern selected. The
time filter is set to the last 15 minutes and the search query is set to match-all (\*).
If you don't see any documents, try setting the time filter to a wider time range.
If you still don't see any results, it's possible that you don't *have* any documents.
[[status]]
=== Checking Kibana Status
You can reach the Kibana server's status page by navigating to `localhost:5601/status`. The status page displays
information about the server's resource usage and lists the installed plugins.
image::images/kibana-status-page.png[]

View file

@ -31,7 +31,8 @@ remove a range.
or bottom _n_ elements of a given field to display, ordered by count or a custom metric.
*Filters*:: You can specify a set of {ref}/search-aggregations-bucket-filters-aggregation.html[_filters_] for the data.
You can specify a filter as a query string or in JSON format, just as in the Discover search bar. Click *Add Filter* to
add another filter.
add another filter. Click the image:images/labelbutton.png[] *label* button to open the label field, where you can type
in a name to display on the visualization.
*Significant Terms*:: Displays the results of the experimental
{ref}/search-aggregations-bucket-significantterms-aggregation.html[_significant terms_] aggregation. The value of the
*Size* parameter defines the number of entries this aggregation returns.

View file

@ -6,7 +6,7 @@ key Kibana functionality. By the end of this tutorial, you will have:
* Loaded a sample data set into your Elasticsearch installation
* Defined at least one index pattern
* Used the <<discover, Discover>> functionality to explore your data
* Use the <<discover, Discover>> functionality to explore your data
* Set up some <<visualize,_visualizations_>> to graphically represent your data
* Assembled visualizations into a <<dashboard,Dashboard>>

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

BIN
docs/images/labelbutton.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 582 B

View file

@ -42,7 +42,8 @@ remove a range.
or bottom _n_ elements of a given field to display, ordered by count or a custom metric.
*Filters*:: You can specify a set of {ref}/search-aggregations-bucket-filters-aggregation.html[_filters_] for the data.
You can specify a filter as a query string or in JSON format, just as in the Discover search bar. Click *Add Filter* to
add another filter.
add another filter. Click the image:images/labelbutton.png[] *label* button to open the label field, where you can type
in a name to display on the visualization.
*Significant Terms*:: Displays the results of the experimental
{ref}/search-aggregations-bucket-significantterms-aggregation.html[_significant terms_] aggregation. The value of the
*Size* parameter defines the number of entries this aggregation returns.

View file

@ -1,64 +1,57 @@
[[settings]]
== Settings
To use Kibana, you have to tell it about the Elasticsearch indices that you
want to explore by configuring one or more index patterns. You can also:
To use Kibana, you have to tell it about the Elasticsearch indices that you want to explore by configuring one or more
index patterns. You can also:
* Create scripted fields that are computed on the fly from your data. You can
browse and visualize scripted fields, but you cannot search them.
* Set advanced options such as the number of rows to show in a table and
how many of the most popular fields to show. Use caution when modifying advanced options,
as it's possible to set values that are incompatible with one another.
* Create scripted fields that are computed on the fly from your data. You can browse and visualize scripted fields, but
you cannot search them.
* Set advanced options such as the number of rows to show in a table and how many of the most popular fields to show.
Use caution when modifying advanced options, as it's possible to set values that are incompatible with one another.
* Configure Kibana for a production environment
[float]
[[settings-create-pattern]]
=== Creating an Index Pattern to Connect to Elasticsearch
An _index pattern_ identifies one or more Elasticsearch indices that you want to
explore with Kibana. Kibana looks for index names that match the specified pattern.
An asterisk (*) in the pattern matches zero or more characters. For example, the pattern
`myindex-*` matches all indices whose names start with `myindex-`, such as `myindex-1`
and `myindex-2`.
An _index pattern_ identifies one or more Elasticsearch indices that you want to explore with Kibana. Kibana looks for
index names that match the specified pattern.
An asterisk (*) in the pattern matches zero or more characters. For example, the pattern `myindex-*` matches all
indices whose names start with `myindex-`, such as `myindex-1` and `myindex-2`.
If you use event times to create index names (for example, if you're pushing data
into Elasticsearch from Logstash), the index pattern can also contain a date format.
In this case, the static text in the pattern must be enclosed in brackets, and you
specify the date format using the tokens described in <<date-format-tokens>>.
If you use event times to create index names (for example, if you're pushing data into Elasticsearch from Logstash),
the index pattern can also contain a date format.
In this case, the static text in the pattern must be enclosed in brackets, and you specify the date format using the
tokens described in <<date-format-tokens>>.
For example, `[logstash-]YYYY.MM.DD` matches all indices whose names have a
timestamp of the form `YYYY.MM.DD` appended to the prefix `logstash-`, such as
`logstash-2015.01.31` and `logstash-2015-02-01`.
For example, `[logstash-]YYYY.MM.DD` matches all indices whose names have a timestamp of the form `YYYY.MM.DD` appended
to the prefix `logstash-`, such as `logstash-2015.01.31` and `logstash-2015-02-01`.
An index pattern can also simply be the name of a single index.
To create an index pattern to connect to Elasticsearch:
. Go to the *Settings > Indices* tab.
. Specify an index pattern that matches the name of one or more of your Elasticsearch
indices. By default, Kibana guesses that you're you're working with log data being
fed into Elasticsearch by Logstash.
. Specify an index pattern that matches the name of one or more of your Elasticsearch indices. By default, Kibana
guesses that you're you're working with log data being fed into Elasticsearch by Logstash.
+
NOTE: When you switch between top-level tabs, Kibana remembers where you were.
For example, if you view a particular index pattern from the Settings tab, switch
to the Discover tab, and then go back to the Settings tab, Kibana displays the
index pattern you last looked at. To get to the create pattern form, click
the *Add* button in the Index Patterns list.
NOTE: When you switch between top-level tabs, Kibana remembers where you were. For example, if you view a particular
index pattern from the Settings tab, switch to the Discover tab, and then go back to the Settings tab, Kibana displays
the index pattern you last looked at. To get to the create pattern form, click the *Add* button in the Index Patterns
list.
. If your index contains a timestamp field that you want to use to perform
time-based comparisons, select the *Index contains time-based events* option
and select the index field that contains the timestamp. Kibana reads the
index mapping to list all of the fields that contain a timestamp.
. If your index contains a timestamp field that you want to use to perform time-based comparisons, select the *Index
contains time-based events* option and select the index field that contains the timestamp. Kibana reads the index
mapping to list all of the fields that contain a timestamp.
. If new indices are generated periodically and have a timestamp appended to
the name, select the *Use event times to create index names* option and select
the *Index pattern interval*. This enables Kibana to search only those indices
that could possibly contain data in the time range you specify. This is
primarily applicable if you are using Logstash to feed data into Elasticsearch.
. If new indices are generated periodically and have a timestamp appended to the name, select the *Use event times to
create index names* option and select the *Index pattern interval*. This enables Kibana to search only those indices
that could possibly contain data in the time range you specify. This is primarily applicable if you are using Logstash
to feed data into Elasticsearch.
. Click *Create* to add the index pattern.
. To designate the new pattern as the default pattern to load when you view
the Discover tab, click the *favorite* button.
. To designate the new pattern as the default pattern to load when you view the Discover tab, click the *favorite*
button.
[float]
[[date-format-tokens]]
@ -116,10 +109,9 @@ the Discover tab, click the *favorite* button.
[float]
[[set-default-pattern]]
=== Setting the Default Index Pattern
The default index pattern is loaded by automatically when you view the *Discover* tab.
Kibana displays a star to the left of the name of the default pattern in the Index Patterns list
on the *Settings > Indices* tab. The first pattern you create is automatically
designated as the default pattern.
The default index pattern is loaded by automatically when you view the *Discover* tab. Kibana displays a star to the
left of the name of the default pattern in the Index Patterns list on the *Settings > Indices* tab. The first pattern
you create is automatically designated as the default pattern.
To set a different pattern as the default index pattern:
@ -132,13 +124,11 @@ NOTE: You can also manually set the default index pattern in *Advanced > Setting
[float]
[[reload-fields]]
=== Reloading the Index Fields List
When you add an index mapping, Kibana automatically scans the indices that
match the pattern to display a list of the index fields. You can reload the
index fields list to pick up any newly-added fields.
When you add an index mapping, Kibana automatically scans the indices that match the pattern to display a list of the
index fields. You can reload the index fields list to pick up any newly-added fields.
Reloading the index fields list also resets Kibana's popularity counters for the fields.
The popularity counters keep track of the fields you've used most often within Kibana
and are used to sort fields within lists.
Reloading the index fields list also resets Kibana's popularity counters for the fields. The popularity counters keep
track of the fields you've used most often within Kibana and are used to sort fields within lists.
To reload the index fields list:
@ -168,20 +158,17 @@ You can also set the field's popularity value in the *Popularity* text entry box
[float]
[[create-scripted-field]]
=== Creating a Scripted Field
Scripted fields compute data on the fly from the data in your
Elasticsearch indices. Scripted field data is shown on the Discover tab as
part of the document data, and you can use scripted fields in your visualizations.
(Scripted field values are computed at query time so they aren't indexed and
cannot be searched.)
Scripted fields compute data on the fly from the data in your Elasticsearch indices. Scripted field data is shown on
the Discover tab as part of the document data, and you can use scripted fields in your visualizations.
Scripted field values are computed at query time so they aren't indexed and cannot be searched.
WARNING: Computing data on the fly with scripted fields can be very resource
intensive and can have a direct impact on Kibana's performance. Keep in mind
that there's no built-in validation of a scripted field. If your scripts are
buggy, you'll get exceptions whenever you try to view the dynamically generated
data.
WARNING: Computing data on the fly with scripted fields can be very resource intensive and can have a direct impact on
Kibana's performance. Keep in mind that there's no built-in validation of a scripted field. If your scripts are
buggy, you'll get exceptions whenever you try to view the dynamically generated data.
Scripted fields use the Lucene expression syntax. For more information,
see http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html#_lucene_expressions_scripts[Lucene Expressions Scripts].
see http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html#_lucene_expressions_scripts[
Lucene Expressions Scripts].
You can reference any single value numeric field in your expressions, for example:
@ -196,8 +183,7 @@ To create a scripted field:
. Go to the pattern's *Scripted Fields* tab.
. Click *Add Scripted Field*.
. Enter a name for the scripted field.
. Enter the expression that you want to use to compute a value on the fly
from your index data.
. Enter the expression that you want to use to compute a value on the fly from your index data.
. Click *Save Scripted Field*.
For more information about scripted fields in Elasticsearch, see
@ -215,10 +201,8 @@ To modify a scripted field:
. Click the *Edit* button for the scripted field you want to change.
. Make your changes and then click *Save Scripted Field* to update the field.
WARNING: Keep in mind
that there's no built-in validation of a scripted field. If your scripts are
buggy, you'll get exceptions whenever you try to view the dynamically generated
data.
WARNING: Keep in mind that there's no built-in validation of a scripted field. If your scripts are buggy, you'll get
exceptions whenever you try to view the dynamically generated data.
[float]
[[delete-scripted-field]]
@ -231,13 +215,12 @@ To delete a scripted field:
[[advanced-options]]
=== Setting Advanced Options
The Advanced Settings page enables you to directly edit settings that control
the behavior of the Kibana application. For example, you can change the format
used to display dates, specify the default index pattern, and set the precision
The Advanced Settings page enables you to directly edit settings that control the behavior of the Kibana application.
For example, you can change the format used to display dates, specify the default index pattern, and set the precision
for displayed decimal values.
WARNING: Changing advanced settings can have unintended consequences. If you aren't
sure what you're doing, it's best to leave these settings as-is.
WARNING: Changing advanced settings can have unintended consequences. If you aren't sure what you're doing, it's best
to leave these settings as-is.
To set advanced options:
@ -253,30 +236,26 @@ To set advanced options:
You can view, edit, and delete saved searches, visualizations, and dashboards from *Settings > Objects*. You can also
export or import sets of searches, visualizations, and dashboards.
Viewing a saved object displays the selected item in the *Discover*, *Visualize*,
or *Dashboard* page. To view a saved object:
Viewing a saved object displays the selected item in the *Discover*, *Visualize*, or *Dashboard* page. To view a saved
object:
. Go to *Settings > Objects*.
. Select the object you want to view.
. Click the *View* button.
Editing a saved object enables you to directly modify the object definition.
You can change the name of the object, add a description, and modify the
JSON that defines the object's properties.
Editing a saved object enables you to directly modify the object definition. You can change the name of the object, add
a description, and modify the JSON that defines the object's properties.
If you attempt to access an object whose index has been deleted, Kibana displays
its Edit Object page. You can:
If you attempt to access an object whose index has been deleted, Kibana displays its Edit Object page. You can:
* Recreate the index so you can continue using the object.
* Delete the object and recreate it using a different index.
* Change the index name referenced in the object's `kibanaSavedObjectMeta.searchSourceJSON`
to point to an existing index pattern. This is useful if the index you were working
with has been renamed.
* Change the index name referenced in the object's `kibanaSavedObjectMeta.searchSourceJSON` to point to an existing
index pattern. This is useful if the index you were working with has been renamed.
WARNING: No validation is performed for object properties. Submitting invalid
changes will render the object unusable. Generally, you should use the
*Discover*, *Visualize*, or *Dashboard* pages to create new objects instead of
directly editing existing ones.
WARNING: No validation is performed for object properties. Submitting invalid changes will render the object unusable.
Generally, you should use the *Discover*, *Visualize*, or *Dashboard* pages to create new objects instead of directly
editing existing ones.
To edit a saved object:
@ -310,64 +289,135 @@ To import a set of objects:
[[kibana-server-properties]]
=== Setting Kibana Server Properties
The Kibana server reads properties from the `kibana.yml` file on startup. The default
settings configure Kibana to run on `localhost:5601`. To change the host or port number, or
connect to Elasticsearch running on a different machine, you'll need to update your `kibana.yml` file. You can also
enable SSL and set a variety of other options.
The Kibana server reads properties from the `kibana.yml` file on startup. The default settings configure Kibana to run
on `localhost:5601`. To change the host or port number, or connect to Elasticsearch running on a different machine,
you'll need to update your `kibana.yml` file. You can also enable SSL and set a variety of other options.
deprecated[4.2, The names of several Kibana server properties changed in the 4.2 release of Kibana. The previous names remain as functional aliases, but are now deprecated and will be removed in a future release of Kibana]
[horizontal]
.Kibana Server Properties
|===
|Property |Description
`server.port` added[4.2]:: The port that the Kibana server runs on.
+
*alias*: `port` deprecated[4.2]
+
*default*: `5601`
|`port`
|The port that the Kibana server runs on. Default: `port: 5601`.
`server.host` added[4.2]:: The host to bind the Kibana server to.
+
*alias*: `host` deprecated[4.2]
+
*default*: `"0.0.0.0"`
|`host`
|The host to bind the Kibana server to. Default: `host: "0.0.0.0"`.
`elasticsearch.url` added[4.2]:: The Elasticsearch instance where the indices you want to query reside.
+
*alias*: `elasticsearch_url` deprecated[4.2]
+
*default*: `"http://localhost:9200"`
|`elasticsearch_url`
|The Elasticsearch instance where the indices you want to query reside. Default:&nbsp;&nbsp;`elasticsearch_url:
"http://localhost:9200"`.
`elasticsearch.preserveHost` added[4.2]:: By default, the host specified in the incoming request from the browser is specified as the host in the corresponding request Kibana sends to Elasticsearch. If you set this option to `false`, Kibana uses the host specified in `elasticsearch_url`.
+
*alias*: `elasticsearch_preserve_host` deprecated[4.2]
+
*default*: `true`
|`elasticsearch_preserve_host`
|By default, the host specified in the incoming request from the browser is specified as the host in the
corresponding request Kibana sends to Elasticsearch. If you set this option to `false`, Kibana uses the host
specified in `elasticsearch_url`. You probably don't need to worry about this setting--just use the default.
Default: `elasticsearch_preserve_host: true`.
`elasticsearch.ssl.cert` added[4.2]:: This parameter specifies the path to the SSL certificate for Elasticsearch instances that require a client certificate.
+
*alias*: `kibana_elasticsearch_client_crt` deprecated[4.2]
|`kibana_index`
|The name of the index where saved searched, visualizations, and dashboards will be stored. Default: `kibana_index: .kibana`.
`elasticsearch.ssl.key` added[4.2]:: This parameter specifies the path to the SSL key for Elasticsearch instances that require a client key.
+
*alias*: `kibana_elasticsearch_client_key` deprecated[4.2]
|`default_app_id`
|The page that will be displayed when you launch Kibana: `discover`, `visualize`, `dashboard`, or `settings`. Default:
`default_app_id: "discover"`.
`elasticsearch.password` added[4.2]:: This parameter specifies the password for Elasticsearch instances that use HTTP basic authentication. Kibana users still need to authenticate with Elasticsearch, which is proxied through the Kibana server.
+
*alias*: `kibana_elasticsearch_password` deprecated [4.2]
|`request_timeout`
|How long to wait for responses from the Kibana backend or Elasticsearch, in milliseconds. Default: `request_timeout: 500000`.
`elasticsearch.username` added[4.2]:: This parameter specifies the username for Elasticsearch instances that use HTTP basic authentication. Kibana users still need to authenticate with Elasticsearch, which is proxied through the Kibana server.
+
*alias*: `kibana_elasticsearch_username` deprecated[4.2]
|`shard_timeout`
|How long Elasticsearch should wait for responses from shards. Set to 0 to disable. Default: `shard_timeout: 0`.
`elasticsearch.pingTimeout` added[4.2]:: This parameter specifies the maximum wait time in milliseconds for ping responses by Elasticsearch.
+
*alias*: `ping_timeout` deprecated[4.2]
+
*default*: `1500`
|`verify_ssl`
|Indicates whether or not to validate the Elasticsearch SSL certificate. Set to false to disable SSL verification.
Default: `verify_ssl: true`.
`elasticsearch.startupTimeout` added[4.2]:: This parameter specifies the maximum wait time in milliseconds for Elasticsearch discovery at Kibana startup. Kibana repeats attempts to discover an Elasticsearch cluster after the specified time elapses.
+
*alias*: `startup_timeout` deprecated[4.2]
+
*default*: `5000`
|`ca`
|The path to the CA certificate for your Elasticsearch instance. Specify if you are using a self-signed certificate
so the certificate can be verified. (Otherwise, you have to disable `verify_ssl`.) Default: none.
`kibana.index` added[4.2]:: The name of the index where saved searched, visualizations, and dashboards will be stored..
+
*alias*: `kibana_index` deprecated[4.2]
+
*default*: `.kibana`
|`ssl_key_file`
|The path to your Kibana server's key file. Must be set to encrypt communications between the browser and Kibana. Default: none.
`kibana.defaultAppId` added[4.2]:: The page that will be displayed when you launch Kibana: `discover`, `visualize`, `dashboard`, or `settings`.
+
*alias*: `default_app_id` deprecated[4.2]
+
*default*: `"discover"`
|`ssl_cert_file`
|The path to your Kibana server's certificate file. Must be set to encrypt communications between the browser and Kibana. Default: none.
`logging.silent` added[4.2]:: Set this value to `true` to suppress all logging output.
+
*default*: `false`
|`pid_file`
|The location where you want to store the process ID file. If not specified, the PID file is stored in
`/var/run/kibana.pid`. Default: none.
`logging.quiet` added[4.2]:: Set this value to `true` to suppress all logging output except for log messages tagged `error`, `fatal`, or Hapi.js errors.
+
*default*: `false`
|`log_file`
|The location where you want to store the Kibana's log output. If not specified, log output is written to standard
output and not stored. Specifying a log file suppresses log writes to standard output. Default: none.
`logging.verbose` added[4.2]:: Set this value to `true` to log all events, including system usage information and all requests.
+
*default*: `false`
|===
`logging.events` added[4.2]:: You can specify a map of log types to output tags for this parameter to create a customized set of loggable events, as in the following example:
+
[source,json]
{
log: ['info', 'warning', 'error', 'fatal'],
response: '*',
error: '*'
}
`elasticsearch.requestTimeout` added[4.2]:: How long to wait for responses from the Kibana backend or Elasticsearch, in milliseconds.
+
*alias*: `request_timeout` deprecated[4.2]
+
*default*: `500000`
`elasticsearch.shardTimeout` added[4.2]:: How long Elasticsearch should wait for responses from shards. Set to 0 to disable.
+
*alias*: `shard_timeout` deprecated[4.2]
+
*default*: `0`
`elasticsearch.ssl.verify` added[4.2]:: Indicates whether or not to validate the Elasticsearch SSL certificate. Set to false to disable SSL verification.
+
*alias*: `verify_ssl` deprecated[4.2]
+
*default*: `true`
`elasticsearch.ssl.ca` added[4.2]:: The path to the CA certificate for your Elasticsearch instance. Specify if you are using a self-signed certificate so the certificate can be verified. Disable `elasticsearch.ssl.verify` otherwise.
+
*alias*: `ca` deprecated[4.2]
`server.ssl.key` added[4.2]:: The path to your Kibana server's key file. Must be set to encrypt communications between the browser and Kibana.
+
*alias*: `ssl_key_file` deprecated[4.2]
`server.ssl.cert` added[4.2]:: The path to your Kibana server's certificate file. Must be set to encrypt communications between the browser and Kibana.
+
*alias*: `ssl_cert_file` deprecated[4.2]
`pid.file` added[4.2]:: The location where you want to store the process ID file.
+
*alias*: `pid_file` deprecated[4.2]
+
*default*: `/var/run/kibana.pid`
`logging.dest` added[4.2]:: The location where you want to store the Kibana's log output. If not specified, log output is written to standard output and not stored. Specifying a log file suppresses log writes to standard output.
+
*alias*: `log_file` deprecated[4.2]

View file

@ -62,7 +62,8 @@ remove a range.
or bottom _n_ elements of a given field to display, ordered by count or a custom metric.
*Filters*:: You can specify a set of {ref}/search-aggregations-bucket-filters-aggregation.html[_filters_] for the data.
You can specify a filter as a query string or in JSON format, just as in the Discover search bar. Click *Add Filter* to
add another filter.
add another filter. Click the image:images/labelbutton.png[] *label* button to open the label field, where you can type
in a name to display on the visualization.
*Significant Terms*:: Displays the results of the experimental
{ref}/search-aggregations-bucket-significantterms-aggregation.html[_significant terms_] aggregation. The value of the
*Size* parameter defines the number of entries this aggregation returns.

View file

@ -28,7 +28,8 @@ remove a range.
or bottom _n_ elements of a given field to display, ordered by count or a custom metric.
*Filters*:: You can specify a set of {ref}/search-aggregations-bucket-filters-aggregation.html[_filters_] for the data.
You can specify a filter as a query string or in JSON format, just as in the Discover search bar. Click *Add Filter* to
add another filter.
add another filter. Click the images:labelbutton.png[] *label* button to open the label field, where you can type in a
name to display on the visualization.
*Significant Terms*:: Displays the results of the experimental
{ref}/search-aggregations-bucket-significantterms-aggregation.html[_significant terms_] aggregation.

5546
npm-shrinkwrap.json generated

File diff suppressed because it is too large Load diff

View file

@ -13,8 +13,8 @@
"private": false,
"version": "4.2.0-snapshot",
"build": {
"number": 8173,
"sha": "0102888deb393e4141369fbd1644a5d77f8732da"
"number": 8467,
"sha": "6cb7fec4e154faa0a4a3fee4b33dfef91b9870d9"
},
"main": "src/server/KbnServer.js",
"homepage": "https://www.elastic.co/products/kibana",
@ -42,7 +42,8 @@
"build": "grunt build",
"start": "./bin/kibana --dev",
"precommit": "grunt lintStagedFiles",
"karma": "karma start"
"karma": "karma start",
"elasticsearch": "grunt esvm:dev:keepalive"
},
"repository": {
"type": "git",
@ -62,8 +63,8 @@
"angular-elastic": "2.5.0",
"angular-route": "1.2.28",
"ansicolors": "^0.3.2",
"autoprefixer": "^5.2.0",
"autoprefixer-loader": "^2.0.0",
"autoprefixer": "5.1.x",
"autoprefixer-loader": "2.0.x",
"babel": "^5.8.21",
"babel-core": "^5.8.22",
"babel-loader": "^5.3.2",
@ -76,8 +77,8 @@
"commander": "^2.8.1",
"css-loader": "^0.15.1",
"d3": "^3.5.6",
"elasticsearch": "^5.0.0",
"elasticsearch-browser": "^5.0.0",
"elasticsearch": "^8.0.1",
"elasticsearch-browser": "^8.0.1",
"expiry-js": "^0.1.7",
"exports-loader": "^0.6.2",
"expose-loader": "^0.7.0",
@ -125,9 +126,9 @@
"Nonsense": "^0.1.2",
"angular-mocks": "1.2.28",
"auto-release-sinon": "^1.0.3",
"babel-eslint": "^4.0.5",
"babel-eslint": "^4.1.1",
"chokidar": "^1.0.4",
"eslint": "1.0.x",
"eslint": "^1.3.1",
"expect.js": "^0.3.1",
"faker": "^1.1.0",
"glob": "^4.3.2",
@ -141,7 +142,7 @@
"grunt-run": "^0.4.0",
"grunt-s3": "^0.2.0-alpha.3",
"grunt-simple-mocha": "^0.4.0",
"gruntify-eslint": "^1.0.0",
"gruntify-eslint": "^1.0.1",
"html-entities": "^1.1.1",
"husky": "^0.8.1",
"istanbul-instrumenter-loader": "^0.1.3",

View file

@ -1,2 +1,2 @@
require('babel/register')(require('../optimize/babelOptions'));
require('babel/register')(require('../optimize/babelOptions').node);
require('./cli');

View file

@ -114,7 +114,7 @@ class BaseOptimizer {
test: /\.js$/,
exclude: babelExclude.concat(this.env.noParse),
loader: 'babel',
query: babelOptions
query: babelOptions.webpack
},
{
test: /\.jsx$/,
@ -122,7 +122,7 @@ class BaseOptimizer {
loader: 'babel',
query: defaults({
nonStandard: true,
}, babelOptions)
}, babelOptions.webpack)
}
].concat(this.env.loaders),
postLoaders: this.env.postLoaders || [],
@ -130,7 +130,7 @@ class BaseOptimizer {
},
resolve: {
extensions: ['.babel.js', '.js', '.less', ''],
extensions: ['.js', '.jsx', '.less', ''],
postfixes: [''],
modulesDirectories: ['webpackShims', 'node_modules'],
loaderPostfixes: ['-loader', ''],

View file

@ -1,12 +1,14 @@
var _ = require('lodash');
var fromRoot = require('requirefrom')('src/utils')('fromRoot');
var babelOpts = _.defaults({
exports.webpack = {
stage: 1,
nonStandard: false,
optional: ['runtime']
};
exports.node = Object.assign({
ignore: [
fromRoot('src'),
/[\\\/](node_modules|bower_components)[\\\/]/
]
}, require('../optimize/babelOptions'));
require('babel/register')(babelOpts);
require('./cli');
}, exports.webpack);

View file

@ -1,4 +1,7 @@
module.exports = {
exports.webpack = {
stage: 1,
nonStandard: false
nonStandard: false,
optional: ['runtime']
};
exports.node = Object.assign({}, exports.webpack);

View file

@ -23,7 +23,7 @@ module.exports = function (kibana) {
cert: Joi.string(),
key: Joi.string()
}).default(),
apiVersion: Joi.string().default('master'),
apiVersion: Joi.string().default('2.0'),
minimumVerison: Joi.string().default('2.0.0')
}).default();
},

View file

@ -113,6 +113,85 @@
Desaturate map tiles
<kbn-info info="Reduce the vibrancy of tile colors, this does not work in any version of Internet Explorer"
<kbn-info info="Reduce the vibrancy of tile colors, this does not work in any version of Internet Explorer"></kbn-info>
</label>
</div>
<div class="vis-option-item form-group">
<label>
<input type="checkbox"
name="wms.enabled"
ng-model="vis.params.wms.enabled">
WMS compliant map server
<kbn-info info="Use WMS compliant map tile server. For advanced users only."></kbn-info>
</label>
</div>
<div ng-show="vis.params.wms.enabled" class="well">
<div class="vis-option-item form-group">
<p>
WMS maps are 3rd party mapping services that have not been verified to work with Kibana.
These should be considered expert settings.
</p>
<label>
WMS url*
</label>
<input type="text" class="form-control"
name="wms.url"
ng-model="vis.params.wms.url">
</div>
<div class="vis-option-item form-group">
<label>
WMS layers* <kbn-info info="A comma seperated list of layers to use."></kbn-info>
</label>
<input type="text" class="form-control"
ng-require="vis.params.wms.enabled"
ng-model="vis.params.wms.options.layers"
name="wms.options.layers">
</div>
<div class="vis-option-item form-group">
<label>
WMS version* <kbn-info info="The version of WMS the server supports"></kbn-info>
</label>
<input type="text" class="form-control"
name="wms.options.version"
ng-model="vis.params.wms.options.version">
</div>
<div class="vis-option-item form-group">
<label>
WMS format* <kbn-info info="Usually image/png or image/jpeg. Use png if the server will return transparent layers"></kbn-info>
</label>
<input type="text" class="form-control"
name="wms.options.format"
ng-model="vis.params.wms.options.format">
</div>
<div class="vis-option-item form-group">
<label>
WMS attribution <kbn-info info="Attribution string for the lower right corner<"></kbn-info>
</label>
<input type="text" class="form-control"
name="wms.options.attribution"
ng-model="vis.params.wms.options.attribution">
</div>
<div class="vis-option-item form-group">
<label>
WMS styles* <kbn-info info="A comma seperated list of WMS server supported styles to use. Blank in most cases."></kbn-info>
</label>
<input type="text" class="form-control"
name="wms.options.styles"
ng-model="vis.params.wms.options.styles">
</div>
<p>* if this parameter is incorrect, maps will fail to load.</p>
</div>

View file

@ -22,6 +22,7 @@ define(function (require) {
heatRadius: 25,
heatBlur: 15,
heatNormalizeData: true,
wms: config.get('visualization:tileMap:WMSdefaults')
},
mapTypes: ['Scaled Circle Markers', 'Shaded Circle Markers', 'Shaded Geohash Grid', 'Heatmap'],
canDesaturate: !!supports.cssFilters,

View file

@ -39,7 +39,8 @@ module.exports = function (kibana) {
return {
kbnIndex: config.get('kibana.index'),
esShardTimeout: config.get('elasticsearch.shardTimeout')
esShardTimeout: config.get('elasticsearch.shardTimeout'),
esApiVersion: config.get('elasticsearch.apiVersion'),
};
}
}

View file

@ -1,6 +1,14 @@
<div class="panel panel-default" ng-switch on="panel.type" ng-if="savedObj || error">
<div class="panel-heading">
<span class="panel-title">{{savedObj.title}}</span>
<span class="panel-title">
<i
class="fa"
ng-class="savedObj.vis.type.icon"
aria-label="{{savedObj.vis.type.title}} Icon"
title="{{savedObj.vis.type.title}}">
</i>
{{savedObj.title}}
</span>
<div class="btn-group">
<a aria-label="Edit" ng-show="chrome.getVisible() && editUrl" ng-href="{{editUrl}}">
<i aria-hidden="true" class="fa fa-pencil"></i>

View file

@ -76,6 +76,12 @@ dashboard-grid {
.ellipsis();
flex: 1 1 auto;
i {
opacity: 0.3;
font-size: 1.2em;
margin-right: 4px;
}
}
a {

View file

@ -5,7 +5,7 @@
(Default: <i>{{conf.defVal == undefined ? 'null' : conf.defVal}}</i>)
</span>
<br>
<span class="smaller">{{conf.description}}</span>
<span class="smaller" ng-bind-html="conf.description | trustAsHtml"></span>
</td>
<td class="value">

View file

@ -155,10 +155,13 @@ define(function (require) {
var pattern = mockIndexPattern(index);
return indexPatterns.mapper.getIndicesForIndexPattern(pattern)
.catch(notify.error)
.catch(function (err) {
if (err instanceof IndexPatternMissingIndices) return;
notify.error(err);
})
.then(function (existing) {
var all = existing.all;
var matches = existing.matches;
var all = _.get(existing, 'all', []);
var matches = _.get(existing, 'matches', []);
if (all.length) {
index.existing = {
class: 'success',

View file

@ -130,7 +130,8 @@
<div class="vis-editor-canvas" ng-class="{ embedded: !chrome.getVisible() }">
<div class="visualize-info" ng-if="savedVis.id">
<div class="visualize-info-tab">
<div class="visualize-info-tab" title="{{savedVis.vis.type.title}}">
<i class="fa" aria-label="{{savedVis.vis.type.title}} Icon" ng-class="savedVis.vis.type.icon"></i>
<span bindonce bo-bind="savedVis.title"></span>
</div>
</div>

View file

@ -1,41 +1,37 @@
module.exports = function ({env, bundle}) {
module.exports = require('lodash').template(
`
let pluginSlug = env.pluginInfo.sort()
.map(p => ' * - ' + p)
.join('\n');
let requires = bundle.modules
.map(m => `require('${m}');`)
.join('\n');
return `
/**
* Test entry file
*
* This is programatically created and updated, do not modify
*
* context: <%= JSON.stringify(env.context) %>
* context: ${JSON.stringify(env.context)}
* includes code from:
<%
env.pluginInfo.sort().forEach(function (plugin, i) {
if (i > 0) print('\\n');
print(' * - ' + plugin);
});
%>
${pluginSlug}
*
*/
window.__KBN__ = {
vars: {
kbnIndex: '.kibana',
esShardTimeout: 1500
esShardTimeout: 1500,
esApiVersion: '2.0',
}
};
require('ui/testHarness');
<%
bundle.modules.forEach(function (id, i) {
if (i > 0) print('\\n');
print(\`require('\${id.replace(/\\\\/g, '\\\\\\\\')}');\`);
});
%>
${requires}
require('ui/testHarness').bootstrap(/* go! */);
`
);
`;
};

View file

@ -14,7 +14,7 @@ module.exports = class KbnLogger {
this.dest = process.stdout;
} else {
this.dest = writeStr(config.dest, {
mode: 'a',
flags: 'a',
encoding: 'utf8'
});
}

View file

@ -9,6 +9,9 @@ module.exports = class PluginApi {
this.package = require(join(pluginPath, 'package.json'));
this.autoload = require('../../ui/autoload');
this.Plugin = Plugin.scoped(kibana, pluginPath, this.package);
this.mixin = _.bindKey(kibana, 'mixin');
}
get uiExports() {
throw new Error('plugin.uiExports is not defined until initialize phase');
}
};

View file

@ -5,16 +5,20 @@ let PluginApi = require('./PluginApi');
let Collection = require('requirefrom')('src')('utils/Collection');
let byIdCache = Symbol('byIdCache');
let pluginApis = Symbol('pluginApis');
module.exports = class Plugins extends Collection {
constructor(kbnServer) {
super();
this.kbnServer = kbnServer;
this[pluginApis] = new Set();
}
async new(path) {
let api = new PluginApi(this.kbnServer, path);
this[pluginApis].add(api);
let output = [].concat(require(path)(api) || []);
let config = this.kbnServer.config;
@ -42,4 +46,8 @@ module.exports = class Plugins extends Collection {
return this[byIdCache] || (this[byIdCache] = indexBy([...this], 'id'));
}
getPluginApis() {
return this[pluginApis];
}
};

View file

@ -7,8 +7,18 @@ module.exports = async function (kbnServer, server, config) {
}
let { plugins } = kbnServer;
let path = [];
// extend plugin apis with additional context
plugins.getPluginApis().forEach(api => {
Object.defineProperty(api, 'uiExports', {
value: kbnServer.uiExports
});
});
let path = [];
async function initialize(id) {
let plugin = plugins.byId[id];
@ -27,7 +37,6 @@ module.exports = async function (kbnServer, server, config) {
}
await plugin.init();
path.pop();
};

View file

@ -17,7 +17,7 @@ class Status extends EventEmitter {
tags.push(this.state === 'red' ? 'error' : 'info');
server.log(tags, {
tmpl: 'Status changed from <%= prevState %> to <%= state %><% message && print(` - ${message}`) %>',
tmpl: 'Status changed from <%= prevState %> to <%= state %><%= message ? " - " + message : "" %>',
name: name,
state: this.state,
message: this.message,

View file

@ -1,37 +1,29 @@
module.exports = function ({env, bundle}) {
module.exports = require('lodash').template(
`
let pluginSlug = env.pluginInfo.sort()
.map(p => ' * - ' + p)
.join('\n');
let requires = bundle.modules
.map(m => `require('${m}');`)
.join('\n');
return `
/**
* Optimized application entry file
* Test entry file
*
* This is programatically created and updated, do not modify
*
* context: <%= JSON.stringify(env.context) %>
* context: ${JSON.stringify(env.context)}
* includes code from:
<%
env.pluginInfo.sort().forEach(function (plugin) {
print(\` * - \${plugin}\n\`);
});
%> *
${pluginSlug}
*
*/
require('ui/chrome');
<%
bundle.modules
.filter(function (id) {
return id !== 'ui/chrome';
})
.forEach(function (id, i) {
if (i > 0) print('\\n');
print(\`require('\${id}');\`);
});
%>
require('ui/chrome')
${requires}
require('ui/chrome').bootstrap(/* xoxo */);
`
);
`;
};

View file

@ -70,7 +70,10 @@ define(function (require) {
if (_.isString(this.type)) this.type = visTypes.byName[this.type];
this.listeners = _.assign({}, state.listeners, this.type.listeners);
this.params = _.defaults({}, _.cloneDeep(state.params || {}), this.type.params.defaults || {});
this.params = _.defaults({},
_.cloneDeep(state.params || {}),
_.cloneDeep(this.type.params.defaults || {})
);
this.aggs = new AggConfigs(this, state.aggs);
};

View file

@ -38,8 +38,7 @@ describe('AggConfig Filters', function () {
expect(filter.range).to.have.property('bytes');
expect(filter.range.bytes).to.have.property('gte', 2048);
expect(filter.range.bytes).to.have.property('lt', 3072);
expect(filter.meta).to.have.property('formattedValue', '2,048');
});
});
});

View file

@ -41,7 +41,7 @@ describe('AggConfig Filters', function () {
expect(filter.range).to.have.property('bytes');
expect(filter.range.bytes).to.have.property('gte', 1024.0);
expect(filter.range.bytes).to.have.property('lt', 2048.0);
expect(filter.meta).to.have.property('formattedValue', '1,024 to 2,048');
});
});
});

View file

@ -5,10 +5,12 @@ define(function (require) {
return function (aggConfig, key) {
var value = parseInt(key, 10);
return buildRangeFilter(aggConfig.params.field, {
gte: value,
lt: value + aggConfig.params.interval
}, aggConfig.vis.indexPattern);
return buildRangeFilter(
aggConfig.params.field,
{gte: value, lt: value + aggConfig.params.interval},
aggConfig.vis.indexPattern,
aggConfig.fieldFormatter()(key)
);
};
};
});

View file

@ -12,7 +12,7 @@ var parse = _.wrap(require('url').parse, function (parse, path) {
function TabCollection() {
var tabs = null;
var tabs = [];
var specs = null;
var defaults = null;
var activeTab = null;

View file

@ -39,11 +39,14 @@ define(function (require) {
}
doc[method](vals)
.then(function (resp) {
queue.forEach(function (q) { q.resolve(resp); });
}, function (err) {
queue.forEach(function (q) { q.reject(err); });
})
.then(
function (resp) {
queue.forEach(function (q) { q.resolve(resp); });
},
function (err) {
queue.forEach(function (q) { q.reject(err); });
}
)
.finally(function () {
$rootScope.$broadcast('change:config', updated.concat(deleted));
});

View file

@ -31,8 +31,9 @@ define(function () {
']',
description: 'Values that define the format used in situations where timebased' +
' data is rendered in order, and formatted timestamps should adapt to the' +
' interval between measurements. Keys are ISO 8601 intervals:' +
' http://en.wikipedia.org/wiki/ISO_8601#Time_intervals'
' interval between measurements. Keys are' +
' <a href="http://en.wikipedia.org/wiki/ISO_8601#Time_intervals" target="_blank">' +
'ISO8601 intervals.</a>'
},
'defaultIndex': {
value: null,
@ -71,8 +72,26 @@ define(function () {
'visualization:tileMap:maxPrecision': {
value: 7,
description: 'The maximum geoHash precision displayed on tile maps: 7 is high, 10 is very high, ' +
'12 is the max. Explanation of cell dimensions: http://www.elastic.co/guide/en/elasticsearch/reference/current/' +
'search-aggregations-bucket-geohashgrid-aggregation.html#_cell_dimensions_at_the_equator',
'12 is the max. ' +
'<a href="http://www.elastic.co/guide/en/elasticsearch/reference/current/' +
'search-aggregations-bucket-geohashgrid-aggregation.html#_cell_dimensions_at_the_equator" target="_blank">' +
'Explanation of cell dimensions.</a>',
},
'visualization:tileMap:WMSdefaults': {
value: JSON.stringify({
enabled: false,
url: 'https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer',
options: {
version: '1.3.0',
layers: '0',
format: 'image/png',
transparent: true,
attribution: 'Maps provided by USGS',
styles: '',
}
}, null, ' '),
type: 'json',
description: 'Default properties for the WMS map server support in the tile map'
},
'csv:separator': {
value: ',',

View file

@ -96,11 +96,7 @@ define(function (require) {
if (!state.index || !state.type || !state.id) return;
return 'DocVersion:' + (
[
state.index,
state.type,
state.id
]
[ state.index, state.type, state.id ]
.map(encodeURIComponent)
.join('/')
);

View file

@ -5,14 +5,14 @@ define(function (require) {
var es; // share the client amoungst all apps
require('ui/modules')
.get('kibana', ['elasticsearch', 'kibana/config'])
.service('es', function (esFactory, esUrl, $q) {
.service('es', function (esFactory, esUrl, $q, esApiVersion) {
if (es) return es;
es = esFactory({
host: esUrl,
log: 'info',
requestTimeout: 0,
apiVersion: '1.4',
apiVersion: esApiVersion,
plugins: [function (Client, config) {
// esFactory automatically injects the AngularConnector to the config

View file

@ -42,5 +42,26 @@ describe('Filter Bar Directive', function () {
$rootScope.$apply();
});
it('should return a value for a range/histogram filter from a scripted field', (done) => {
let filter = {
meta: {
index: 'logstash-*',
formattedValue: '1,000.00 to 2,000.00',
field: 'script number'
},
script: {
params: {
gte: 1000,
lt: 2000,
value: '>=1,000.00 <2,000.00'
}
}
};
mapScript(filter).then((result) => {
expect(result).to.have.property('value', filter.meta.formattedValue);
done();
});
$rootScope.$apply();
});
});
});

View file

@ -64,15 +64,7 @@ define(function (require) {
includeDefaults: true
});
})
.catch(function (err) {
if (err.status >= 400) {
// transform specific error type
throw new IndexPatternMissingIndices();
} else {
// rethrow all others
throw err;
}
})
.catch(handleMissingIndexPattern)
.then(transformMappingIntoFields)
.then(function (fields) {
fieldCache.set(id, fields);
@ -108,7 +100,8 @@ define(function (require) {
all: all,
matches: matches
};
});
})
.catch(handleMissingIndexPattern);
};
/**
@ -123,6 +116,16 @@ define(function (require) {
};
}
function handleMissingIndexPattern(err) {
if (err.status >= 400) {
// transform specific error type
return Promise.reject(new IndexPatternMissingIndices());
} else {
// rethrow all others
throw err;
}
}
return new Mapper();
};
});

View file

@ -35,6 +35,8 @@ describe('TileMap Map Tests', function () {
leafletMocks.tileLayer = { on: sinon.stub() };
leafletMocks.map = { on: sinon.stub() };
leafletStubs.tileLayer = sinon.stub(L, 'tileLayer', _.constant(leafletMocks.tileLayer));
leafletStubs.tileLayer.wms = sinon.stub(L.tileLayer, 'wms', _.constant(leafletMocks.tileLayer));
leafletStubs.map = sinon.stub(L, 'map', _.constant(leafletMocks.map));
TileMapMap = Private(require('ui/vislib/visualizations/_map'));
@ -96,6 +98,14 @@ describe('TileMap Map Tests', function () {
map._createMap({});
expect(mapStubs.destroy.callCount).to.equal(1);
});
it('should create a WMS layer if WMS is enabled', function () {
expect(L.tileLayer.wms.called).to.be(false);
map = new TileMapMap($mockMapEl, geoJsonData, {attr: {wms: {enabled: true}}});
map._createMap({});
expect(L.tileLayer.wms.called).to.be(true);
L.tileLayer.restore();
});
});
describe('attachEvents', function () {

View file

@ -67,7 +67,7 @@ define(function (require) {
{
type: 'warning',
msg: 'Positive and negative values are not accurately represented by stacked ' +
'area charts. Either changing the chart mode to "overlay" or using a ' +
'area charts. Either changing the chart mode to "overlap" or using a ' +
'bar chart is recommended.',
test: function (vis, data) {
if (!data.shouldBeStacked() || data.maxNumberOfSeries() < 2) return;

View file

@ -264,7 +264,11 @@ define(function (require) {
this._mapZoom = _.get(this._geoJson, 'properties.zoom') || defaultMapZoom;
// add map tiles layer, using the mapTiles object settings
this._tileLayer = L.tileLayer(mapTiles.url, mapTiles.options);
if (this._attr.wms && this._attr.wms.enabled) {
this._tileLayer = L.tileLayer.wms(this._attr.wms.url, this._attr.wms.options);
} else {
this._tileLayer = L.tileLayer(mapTiles.url, mapTiles.options);
}
// append tile layers, center and zoom to the map options
mapOptions.layers = this._tileLayer;

View file

@ -0,0 +1,13 @@
module.exports = function (grunt) {
var srcFile = 'build/kibana/src/optimize/babelOptions.js';
var buildFile = 'build/kibana/src/optimize/babelOptions.build.js';
var rename = require('fs').renameSync;
var unlink = require('fs').unlinkSync;
grunt.registerTask('_build:babelOptions', function () {
unlink(srcFile);
rename(buildFile, srcFile);
});
};

View file

@ -1,13 +0,0 @@
module.exports = function (grunt) {
var srcFile = 'build/kibana/src/cli/index.js';
var buildFile = 'build/kibana/src/cli/index.build.js';
var rename = require('fs').renameSync;
var unlink = require('fs').unlinkSync;
grunt.registerTask('_build:cliIndex', function () {
unlink(srcFile);
rename(buildFile, srcFile);
});
};

View file

@ -9,7 +9,7 @@ module.exports = function (grunt) {
'_build:downloadNodeBuilds:start',
'copy:devSource',
'babel:build',
'_build:cliIndex',
'_build:babelOptions',
'_build:installedPlugins',
'_build:packageJson',
'_build:readme',

View file

@ -2,7 +2,7 @@ module.exports = function (grunt) {
let { config } = grunt;
let { statSync } = require('fs');
let { join } = require('path');
let exec = (...args) => require('../utils/exec').silent(...args, { cwd: config.get('root') });
let exec = (...args) => require('../utils/exec')(...args, { cwd: config.get('root') });
let newFiles = [];
let shrinkwrapFile = join(config.get('root'), 'npm-shrinkwrap.json');
@ -13,7 +13,7 @@ module.exports = function (grunt) {
if (e.code !== 'ENOENT') throw e;
if (createIfMissing) {
exec('npm', ['shrinkwrap', '--dev']);
exec('npm', ['shrinkwrap', '--dev', '--loglevel', 'error']);
newFiles.push(shrinkwrapFile);
}
else grunt.fail.warn('Releases require an npm-shrinkwrap.json file to exist');
@ -28,7 +28,7 @@ module.exports = function (grunt) {
exec('cp', ['npm-shrinkwrap.json', join(config.get('root'), 'build', 'kibana', 'npm-shrinkwrap.build.json')]);
// create shrinkwrap without dev dependencies and copy to build
exec('npm', ['shrinkwrap']);
exec('npm', ['shrinkwrap', '--loglevel', 'error']);
exec('cp', ['npm-shrinkwrap.json', join(config.get('root'), 'build', 'kibana', 'npm-shrinkwrap.json')]);
// restore the dev shrinkwrap
@ -38,4 +38,4 @@ module.exports = function (grunt) {
grunt.registerTask('_build:shrinkwrap:cleanup', function () {
if (newFiles.length) exec('rm', newFiles.splice(0));
});
};
};

View file

@ -3,9 +3,7 @@ let babelOptions = require('requirefrom')('src')('optimize/babelOptions');
module.exports = {
build: {
options: defaults({
optional: ['runtime']
}, babelOptions),
options: babelOptions.node,
src: [
'build/kibana/**/*.js',
'!**/public/**',

View file

@ -6,7 +6,7 @@ module.exports = function (grunt) {
return {
options: {
directory: directory,
branch: 'master',
branch: '2.0',
fresh: !grunt.option('esvm-no-fresh'),
config: {
path: {

View file

@ -4,7 +4,7 @@ module.exports = function (grunt) {
let version = grunt.config.get('pkg.version');
let nodeVersion = grunt.config.get('nodeVersion');
let rootPath = grunt.config.get('root');
let baseUri = `https://iojs.org/dist/v${nodeVersion}`;
let baseUri = `https://nodejs.org/dist/v${nodeVersion}`;
return [
'darwin-x64',
@ -14,7 +14,7 @@ module.exports = function (grunt) {
].map(function (name) {
let win = name === 'windows';
let nodeUrl = win ? `${baseUri}/win-x86/iojs.exe` : `${baseUri}/iojs-v${nodeVersion}-${name}.tar.gz`;
let nodeUrl = win ? `${baseUri}/node.exe` : `${baseUri}/node-v${nodeVersion}-${name}.tar.gz`;
let nodeDir = resolve(rootPath, `.node_binaries/${nodeVersion}/${name}`);
let buildName = `kibana-${version}-${name}`;