mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 17:28:26 -04:00
Merge branch 'master' of github.com:elastic/kibana into feature/console
This commit is contained in:
commit
8c4585a72e
752 changed files with 4607 additions and 3067 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,4 +1,5 @@
|
|||
.aws-config.json
|
||||
.ackrc
|
||||
.DS_Store
|
||||
.node_binaries
|
||||
node_modules
|
||||
|
|
|
@ -55,7 +55,7 @@ Please make sure you have signed the [Contributor License Agreement](http://www.
|
|||
npm run elasticsearch
|
||||
```
|
||||
|
||||
- Start the development server.
|
||||
- Start the development server. _On Windows, you'll need you use Git Bash, Cygwin, or a similar shell that exposes the `sh` command._
|
||||
|
||||
```sh
|
||||
npm start
|
||||
|
@ -128,7 +128,7 @@ Runs both server and browser tests, but skips linting
|
|||
Run only the server tests
|
||||
|
||||
`npm run test:browser`
|
||||
Run only the browser tests
|
||||
Run only the browser tests. Coverage reports are available for browser tests by running `npm run test:coverage`. You can find the results under the `coverage/` directory that will be created upon completion.
|
||||
|
||||
`npm run test:dev`
|
||||
Initializes an environment for debugging the browser tests. Includes an dedicated instance of the kibana server for building the test bundle, and a karma server. When running this task the build is optimized for the first time and then a karma-owned instance of the browser is opened. Click the "debug" button to open a new tab that executes the unit tests.
|
||||
|
@ -146,7 +146,8 @@ Run the tests for just your particular plugin. Assuming you plugin lives outside
|
|||
|
||||
#### Running browser automation tests:
|
||||
|
||||
*The Selenium server that is started currently only runs the tests in Firefox*
|
||||
*The Selenium server that is started currently only runs the tests in a recent version of Firefox.*
|
||||
*You can use the `PATH` environment variable to specify which version of Firefox to use.*
|
||||
|
||||
The following will start Kibana, Elasticsearch and Selenium for you. To run the functional UI tests use the following commands
|
||||
|
||||
|
@ -177,7 +178,7 @@ npm run test:ui:runner
|
|||
- These tests have been developed and tested with Chrome and Firefox browser. In theory, they should work on all browsers (that's the benefit of Intern using Leadfoot).
|
||||
- These tests should also work with an external testing service like https://saucelabs.com/ or https://www.browserstack.com/ but that has not been tested.
|
||||
- https://theintern.github.io/
|
||||
- https://theintern.github.io/leadfoot/Element.html
|
||||
- https://theintern.github.io/leadfoot/module-leadfoot_Element.html
|
||||
|
||||
#### Building OS packages
|
||||
|
||||
|
@ -218,9 +219,10 @@ So, you've been assigned a pull to review. What's that look like?
|
|||
|
||||
Remember, someone is blocked by a pull awaiting review, make it count. Be thorough, the more action items you catch in the first review, the less back and forth will be required, and the better chance the pull has of being successful. Don't you like success?
|
||||
|
||||
1. **Understand the issue** that is being fixed, or the feature being added. Check the description on the pull, and check out the related issue. If you don't understand something, ask the person the submitter for clarification.
|
||||
1. **Understand the issue** that is being fixed, or the feature being added. Check the description on the pull, and check out the related issue. If you don't understand something, ask the submitter for clarification.
|
||||
1. **Reproduce the bug** (or the lack of feature I guess?) in the destination branch, usually `master`. The referenced issue will help you here. If you're unable to reproduce the issue, contact the issue submitter for clarification
|
||||
1. **Check out the pull** and test it. Is the issue fixed? Does it have nasty side effects? Try to create suspect inputs. If it operates on the value of a field try things like: strings (including an empty string), null, numbers, dates. Try to think of edge cases that might break the code.
|
||||
1. **Merge the target branch**. It is possible that tests or the linter have been updated in the target branch since the pull was submitted. Merging the pull could cause core to start failing.
|
||||
1. **Read the code**. Understanding the changes will help you find additional things to test. Contact the submitter if you don't understand something.
|
||||
1. **Go line-by-line**. Are there [style guide](https://github.com/elastic/kibana/blob/master/STYLEGUIDE.md) violations? Strangely named variables? Magic numbers? Do the abstractions make sense to you? Are things arranged in a testable way?
|
||||
1. **Speaking of tests** Are they there? If a new function was added does it have tests? Do the tests, well, TEST anything? Do they just run the function or do they properly check the output?
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
require('babel/register')(require('./src/optimize/babelOptions').node);
|
||||
const camelCase = require('lodash').camelCase;
|
||||
require('babel/register')(require('./src/optimize/babel_options').node);
|
||||
|
||||
module.exports = function (grunt) {
|
||||
// set the config once before calling load-grunt-config
|
||||
// and once during so that we have access to it via
|
||||
// grunt.config.get() within the config files
|
||||
var config = {
|
||||
const config = {
|
||||
pkg: grunt.file.readJSON('package.json'),
|
||||
root: __dirname,
|
||||
src: __dirname + '/src',
|
||||
|
@ -12,7 +13,7 @@ module.exports = function (grunt) {
|
|||
plugins: __dirname + '/src/plugins',
|
||||
server: __dirname + '/src/server',
|
||||
target: __dirname + '/target', // location of the compressed build targets
|
||||
testUtilsDir: __dirname + '/src/testUtils',
|
||||
testUtilsDir: __dirname + '/src/test_utils',
|
||||
configFile: __dirname + '/src/config/kibana.yml',
|
||||
|
||||
karmaBrowser: (function () {
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
# that connects to this Kibana instance.
|
||||
# elasticsearch.preserveHost: true
|
||||
|
||||
# Kibana uses an index in Elasticsearch to store saved searches, visualizations and
|
||||
# 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"
|
||||
|
||||
|
@ -28,12 +28,12 @@
|
|||
|
||||
# If your Elasticsearch is protected with basic authentication, these settings provide
|
||||
# the username and password that the Kibana server uses to perform maintenance on the Kibana
|
||||
# index at startup. Your Kibana users still need to authenticate with Elasticsearch, which
|
||||
# index at startup. Your Kibana users still need to authenticate with Elasticsearch, which
|
||||
# is proxied through the Kibana server.
|
||||
# elasticsearch.username: "user"
|
||||
# elasticsearch.password: "pass"
|
||||
|
||||
# Paths to the PEM-format SSL certificate and SSL key files, respectively. These
|
||||
# Paths to the PEM-format SSL certificate and SSL key files, respectively. These
|
||||
# files enable SSL for outgoing requests from the Kibana server to the browser.
|
||||
# server.ssl.cert: /path/to/your/server.crt
|
||||
# server.ssl.key: /path/to/your/server.key
|
||||
|
@ -43,7 +43,7 @@
|
|||
# elasticsearch.ssl.cert: /path/to/your/client.crt
|
||||
# elasticsearch.ssl.key: /path/to/your/client.key
|
||||
|
||||
# Optional setting that enables you to specify a path to the PEM file for the certificate
|
||||
# Optional setting that enables you to specify a path to the PEM file for the certificate
|
||||
# authority for your Elasticsearch instance.
|
||||
# elasticsearch.ssl.ca: /path/to/your/CA.pem
|
||||
|
||||
|
@ -54,7 +54,7 @@
|
|||
# the elasticsearch.requestTimeout setting.
|
||||
# elasticsearch.pingTimeout: 1500
|
||||
|
||||
# Time in milliseconds to wait for responses from the back end or Elasticsearch. This value
|
||||
# Time in milliseconds to wait for responses from the back end or Elasticsearch. This value
|
||||
# must be a positive integer.
|
||||
# elasticsearch.requestTimeout: 30000
|
||||
|
||||
|
@ -76,6 +76,10 @@
|
|||
# Set the value of this setting to true to suppress all logging output other than error messages.
|
||||
# logging.quiet: false
|
||||
|
||||
# Set the value of this setting to true to log all events, including system usage information
|
||||
# Set the value of this setting to true to log all events, including system usage information
|
||||
# and all requests.
|
||||
# logging.verbose: false
|
||||
|
||||
# Set the interval in milliseconds to sample system and process performance
|
||||
# metrics. Minimum is 100ms. Defaults to 10000.
|
||||
# ops.interval: 10000
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
[[kibana-settings-reference]]
|
||||
|
||||
WARNING: Modifying the following settings can signficantly affect Kibana's performance and cause problems that are difficult to diagnose. Setting a property's value to a blank field will revert to the default behavior, which may not be compatible with other configuration settings. Deleting a custom setting removes it from Kibana permanently.
|
||||
WARNING: Modifying the following settings can signficantly affect Kibana's performance and cause problems that are
|
||||
difficult to diagnose. Setting a property's value to a blank field will revert to the default behavior, which may not be
|
||||
compatible with other configuration settings. Deleting a custom setting removes it from Kibana permanently.
|
||||
|
||||
.Kibana Settings Reference
|
||||
[horizontal]
|
||||
|
@ -8,30 +10,43 @@ WARNING: Modifying the following settings can signficantly affect Kibana's perfo
|
|||
`sort:options`:: Options for the Elasticsearch https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html[sort] parameter.
|
||||
`dateFormat`:: The format to use for displaying pretty-formatted dates.
|
||||
`dateFormat:tz`:: The timezone that Kibana uses. The default value of `Browser` uses the timezone detected by the browser.
|
||||
`dateFormat:scaled`:: These values define the format used to render ordered time-based data. Formatted timestamps must adapt to the interval between measurements. Keys are http://en.wikipedia.org/wiki/ISO_8601#Time_intervals[ISO8601 intervals].
|
||||
`dateFormat:scaled`:: These values define the format used to render ordered time-based data. Formatted timestamps must
|
||||
adapt to the interval between measurements. Keys are http://en.wikipedia.org/wiki/ISO_8601#Time_intervals[ISO8601 intervals].
|
||||
`defaultIndex`:: Default is `null`. This property specifies the default index.
|
||||
`metaFields`:: An array of fields outside of `_source`. Kibana merges these fields into the document when displaying the document.
|
||||
`metaFields`:: An array of fields outside of `_source`. Kibana merges these fields into the document when displaying the
|
||||
document.
|
||||
`discover:sampleSize`:: The number of rows to show in the Discover table.
|
||||
`doc_table:highlight`:: Highlight results in Discover and Saved Searches Dashboard. Highlighing makes request slow when working on big documents. Set this property to `false` to disable highlighting.
|
||||
`courier:maxSegmentCount`:: Kibana splits requests in the Discover app into segments to limit the size of requests sent to the Elasticsearch cluster. This setting constrains the length of the segment list. Long segment lists can significantly increase request processing time.
|
||||
`doc_table:highlight`:: Highlight results in Discover and Saved Searches Dashboard. Highlighing makes request slow when
|
||||
working on big documents. Set this property to `false` to disable highlighting.
|
||||
`courier:maxSegmentCount`:: Kibana splits requests in the Discover app into segments to limit the size of requests sent to
|
||||
the Elasticsearch cluster. This setting constrains the length of the segment list. Long segment lists can significantly
|
||||
increase request processing time.
|
||||
`fields:popularLimit`:: This setting governs how many of the top most popular fields are shown.
|
||||
`histogram:barTarget`:: When date histograms use the `auto` interval, Kibana attempts to generate this number of bars.
|
||||
`histogram:maxBars`:: Date histograms are not generated with more bars than the value of this property, scaling values when necessary.
|
||||
`visualization:tileMap:maxPrecision`:: The maximum geoHash precision displayed on tile maps: 7 is high, 10 is very high, 12 is the maximum. http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geohashgrid-aggregation.html#_cell_dimensions_at_the_equator[Explanation of cell dimensions].
|
||||
`histogram:maxBars`:: Date histograms are not generated with more bars than the value of this property, scaling values
|
||||
when necessary.
|
||||
`visualization:tileMap:maxPrecision`:: The maximum geoHash precision displayed on tile maps: 7 is high, 10 is very high,
|
||||
12 is the maximum. http://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geohashgrid-aggregation.html#_cell_dimensions_at_the_equator[Explanation of cell dimensions].
|
||||
`visualization:tileMap:WMSdefaults`:: Default properties for the WMS map server support in the tile map.
|
||||
`visualization:colorMapping`:: Maps values to specified colors within visualizations.
|
||||
`visualization:loadingDelay`:: Time to wait before dimming visualizations during query.
|
||||
`csv:separator`:: A string that serves as the separator for exported values.
|
||||
`csv:quoteValues`:: Set this property to `true` to quote exported values.
|
||||
`history:limit`:: In fields that have history, such as query inputs, the value of this property limits how many recent values are shown.
|
||||
`shortDots:enable`:: Set this property to `true` to shorten long field names in visualizations. For example, instead of `foo.bar.baz`, show `f.b.baz`.
|
||||
`truncate:maxHeight`:: This property specifies the maximum height that a cell occupies in a table. A value of 0 disables truncation.
|
||||
`indexPattern:fieldMapping:lookBack`:: The value of this property sets the number of recent matching patterns to query the field mapping for index patterns with names that contain timestamps.
|
||||
`format:defaultTypeMap`:: A map of the default format name for each field type. Field types that are not explicitly mentioned use "_default_".
|
||||
`history:limit`:: In fields that have history, such as query inputs, the value of this property limits how many recent
|
||||
values are shown.
|
||||
`shortDots:enable`:: Set this property to `true` to shorten long field names in visualizations. For example, instead of
|
||||
`foo.bar.baz`, show `f.b.baz`.
|
||||
`truncate:maxHeight`:: This property specifies the maximum height that a cell occupies in a table. A value of 0 disables
|
||||
truncation.
|
||||
`indexPattern:fieldMapping:lookBack`:: The value of this property sets the number of recent matching patterns to query the
|
||||
field mapping for index patterns with names that contain timestamps.
|
||||
`format:defaultTypeMap`:: A map of the default format name for each field type. Field types that are not explicitly
|
||||
mentioned use "_default_".
|
||||
`format:number:defaultPattern`:: Default numeral format for the "number" format.
|
||||
`format:bytes:defaultPattern`:: Default numeral format for the "bytes" format.
|
||||
`format:percent:defaultPattern`:: Default numeral format for the "percent" format.
|
||||
`format:currency:defaultPattern`:: Default numeral format for the "currency" format.
|
||||
`savedObjects:perPage`:: The number of objects shown on each page of the list of saved objects. The default value is 5.
|
||||
`timepicker:timeDefaults`:: The default time filter selection.
|
||||
`timepicker:refreshIntervalDefaults`:: The time filter's default refresh interval.
|
||||
`dashboard:defaultDarkTheme`:: Set this property to `true` to make new dashboards use the dark theme by default.
|
||||
`dashboard:defaultDarkTheme`:: Set this property to `true` to make new dashboards use the dark theme by default.
|
||||
|
|
|
@ -45,6 +45,8 @@ sub-aggregation from the list of types.
|
|||
|
||||
You can use the up or down arrows to the right of the aggregation's type to change the aggregation's priority.
|
||||
|
||||
Enter a string in the *Custom Label* field to change the display label.
|
||||
|
||||
You can click the *Advanced* link to display more customization options for your metrics or bucket aggregation:
|
||||
|
||||
*Exclude Pattern*:: Specify a pattern in this field to exclude from the results.
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
:shield: https://www.elastic.co/guide/en/shield/current
|
||||
:k4issue: https://github.com/elastic/kibana/issues/
|
||||
:k4pull: https://github.com/elastic/kibana/pull/
|
||||
:version: 5.0 alpha
|
||||
:esversion: 2.3
|
||||
|
||||
include::introduction.asciidoc[]
|
||||
|
||||
|
|
|
@ -13,9 +13,10 @@ dashboards that display changes to Elasticsearch queries in real time.
|
|||
Setting up Kibana is a snap. You can install Kibana and start exploring your
|
||||
Elasticsearch indices in minutes -- no code, no additional infrastructure required.
|
||||
|
||||
NOTE: This guide describes how to use Kibana 4.3. For information about what's new
|
||||
in Kibana 4.3, see the <<releasenotes, release notes>>.
|
||||
NOTE: This guide describes how to use Kibana {version}. For information about what's new
|
||||
in Kibana {version}, see the <<releasenotes, release notes>>.
|
||||
|
||||
////
|
||||
[float]
|
||||
[[data-discovery]]
|
||||
=== Data Discovery and Visualization
|
||||
|
@ -50,6 +51,7 @@ to correlate related information. For example, we could create a dashboard
|
|||
that displays several visualizations of the TFL data:
|
||||
|
||||
image:images/TFL-Dashboard.jpg[Dashboard]
|
||||
////
|
||||
|
||||
For more information about creating and sharing visualizations and dashboards, see the <<visualize, Visualize>>
|
||||
and <<dashboard, Dashboard>> topics. A complete <<getting-started,tutorial>> covering several aspects of Kibana's
|
||||
|
|
|
@ -39,3 +39,4 @@ retrying.
|
|||
error messages.
|
||||
`logging.verbose`:: *Default: false* Set the value of this setting to `true` to log all events, including system usage
|
||||
information and all requests.
|
||||
`ops.interval`:: *Default: 10000* Set the interval in milliseconds to sample system and process performance metrics. Minimum is 100ms. Defaults to 10 seconds.
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
A metric visualization displays a single number for each aggregation you select:
|
||||
|
||||
include::y-axis-aggs.asciidoc[]
|
||||
|
||||
You can click the *Advanced* link to display more customization options:
|
||||
|
||||
*JSON Input*:: A text field where you can add specific JSON-formatted properties to merge with the aggregation
|
||||
|
@ -17,7 +18,7 @@ NOTE: In Elasticsearch releases 1.4.3 and later, this functionality requires you
|
|||
|
||||
The availability of these options varies depending on the aggregation you choose.
|
||||
|
||||
Click the *Options* tab to change the font used to display the metrics.
|
||||
Click the *Options* tab to display the font size slider.
|
||||
|
||||
[float]
|
||||
[[metric-viewing-detailed-information]]
|
||||
|
|
|
@ -11,6 +11,8 @@ field. Select a field from the drop-down.
|
|||
*Unique Count*:: The {ref}search-aggregations-metrics-cardinality-aggregation.html[_cardinality_] aggregation returns
|
||||
the number of unique values in a field. Select a field from the drop-down.
|
||||
|
||||
Enter a string in the *Custom Label* field to change the display label.
|
||||
|
||||
The _buckets_ aggregations determine what information is being retrieved from your data set.
|
||||
|
||||
Before you choose a buckets aggregation, specify if you are splitting slices within a single chart or splitting into
|
||||
|
@ -57,6 +59,8 @@ aggregation's type to change the aggregation's priority.
|
|||
|
||||
include::color-picker.asciidoc[]
|
||||
|
||||
Enter a string in the *Custom Label* field to change the display label.
|
||||
|
||||
You can click the *Advanced* link to display more customization options for your metrics or bucket aggregation:
|
||||
|
||||
*Exclude Pattern*:: Specify a pattern in this field to exclude from the results.
|
||||
|
|
|
@ -5,6 +5,8 @@ Add-on functionality for Kibana is implemented with plug-in modules. You can use
|
|||
command to manage these modules. You can also install a plugin manually by moving the plugin file to the
|
||||
`installedPlugins` directory and unpacking the plugin files into a new directory.
|
||||
|
||||
A list of existing Kibana plugins is available on https://github.com/elastic/kibana/wiki/Known-Plugins[GitHub].
|
||||
|
||||
[float]
|
||||
=== Installing Plugins
|
||||
|
||||
|
@ -65,6 +67,11 @@ bin/kibana plugin --remove marvel
|
|||
|
||||
You can also remove a plugin manually by deleting the plugin's subdirectory under the `installedPlugins` directory.
|
||||
|
||||
[float]
|
||||
=== Listing Installed Plugins
|
||||
|
||||
Use `--list` or `-l` option to list the currently installed plugins.
|
||||
|
||||
[float]
|
||||
=== Updating Plugins
|
||||
|
||||
|
|
|
@ -1,11 +1,7 @@
|
|||
[[releasenotes]]
|
||||
== Kibana 4.4 Release Notes
|
||||
== Kibana {version} Release Notes
|
||||
|
||||
The 4.4 release of Kibana requires Elasticsearch 2.2 or later.
|
||||
|
||||
Using event times to create index names is no longer supported as of this release. Current versions of Elasticsearch
|
||||
include sophisticated date parsing APIs that Kibana uses to determine date information, removing the need to specify dates
|
||||
in the index pattern name.
|
||||
The {version} release of Kibana requires Elasticsearch {esversion} or later.
|
||||
|
||||
[float]
|
||||
[[enhancements]]
|
||||
|
|
|
@ -19,6 +19,8 @@ numeric field. Select a field from the drop-down.
|
|||
*Unique Count*:: The {ref}search-aggregations-metrics-cardinality-aggregation.html[_cardinality_] aggregation returns
|
||||
the number of unique values in a field. Select a field from the drop-down.
|
||||
|
||||
Enter a string in the *Custom Label* field to change the display label.
|
||||
|
||||
The _buckets_ aggregations determine what information is being retrieved from your data set.
|
||||
|
||||
Before you choose a buckets aggregation, specify if you are splitting the chart or displaying the buckets as *Geo
|
||||
|
@ -71,6 +73,8 @@ based on the geohash coordinates.
|
|||
|
||||
NOTE: By default, the *Change precision on map zoom* box is checked. Uncheck the box to disable this behavior.
|
||||
|
||||
Enter a string in the *Custom Label* field to change the display label.
|
||||
|
||||
You can click the *Advanced* link to display more customization options for your metrics or bucket aggregation:
|
||||
|
||||
*Exclude Pattern*:: Specify a pattern in this field to exclude from the results.
|
||||
|
|
|
@ -26,6 +26,8 @@ values field. Click *+Add* to add a values field.
|
|||
|
||||
You can add an aggregation by clicking the *+ Add Aggregation* button.
|
||||
|
||||
Enter a string in the *Custom Label* field to change the display label.
|
||||
|
||||
The _buckets_ aggregations determine what information is being retrieved from your data set.
|
||||
|
||||
Before you choose a buckets aggregation, specify if you are splitting slices within a single chart or splitting into
|
||||
|
@ -36,6 +38,8 @@ include::x-axis-aggs.asciidoc[]
|
|||
|
||||
include::color-picker.asciidoc[]
|
||||
|
||||
Enter a string in the *Custom Label* field to change the display label.
|
||||
|
||||
You can click the *Advanced* link to display more customization options for your metrics or bucket aggregation:
|
||||
|
||||
*Exclude Pattern*:: Specify a pattern in this field to exclude from the results.
|
||||
|
|
|
@ -28,8 +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. Click the images:labelbutton.png[] *label* button to open the label field, where you can type in a
|
||||
name to display on the visualization.
|
||||
add another filter. Click the image:images/labelbutton.png[Label button icon] *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.
|
||||
|
||||
|
@ -39,3 +39,5 @@ from the list of types.
|
|||
|
||||
When multiple aggregations are defined on a chart's axis, you can use the up or down arrows to the right of the
|
||||
aggregation's type to change the aggregation's priority.
|
||||
|
||||
Enter a string in the *Custom Label* field to change the display label.
|
||||
|
|
|
@ -22,3 +22,5 @@ from the drop-down, then specify one or more percentile rank values in the *Valu
|
|||
values field. Click *+Add* to add a values field.
|
||||
|
||||
You can add an aggregation by clicking the *+ Add Aggregation* button.
|
||||
|
||||
Enter a string in the *Custom Label* field to change the display label.
|
||||
|
|
18
package.json
18
package.json
|
@ -49,7 +49,7 @@
|
|||
"test:coverage": "grunt test:coverage",
|
||||
"build": "grunt build",
|
||||
"build:ospackages": "grunt build --os-packages",
|
||||
"start": "./bin/kibana --dev",
|
||||
"start": "sh ./bin/kibana --dev",
|
||||
"precommit": "grunt precommit",
|
||||
"karma": "karma start",
|
||||
"elasticsearch": "grunt esvm:dev:keepalive",
|
||||
|
@ -81,15 +81,15 @@
|
|||
"ansicolors": "0.3.2",
|
||||
"autoprefixer": "5.1.1",
|
||||
"autoprefixer-loader": "2.0.0",
|
||||
"babel": "5.8.23",
|
||||
"babel-core": "5.8.23",
|
||||
"babel": "5.8.38",
|
||||
"babel-core": "5.8.38",
|
||||
"babel-loader": "5.3.2",
|
||||
"babel-runtime": "5.8.20",
|
||||
"babel-runtime": "5.8.38",
|
||||
"bluebird": "2.9.34",
|
||||
"boom": "2.8.0",
|
||||
"bootstrap": "3.3.5",
|
||||
"bootstrap": "3.3.6",
|
||||
"brace": "0.5.1",
|
||||
"bunyan": "1.4.0",
|
||||
"bunyan": "1.7.1",
|
||||
"clipboard": "1.5.5",
|
||||
"commander": "2.8.1",
|
||||
"css-loader": "0.17.0",
|
||||
|
@ -156,7 +156,7 @@
|
|||
"grunt-cli": "0.1.13",
|
||||
"grunt-contrib-clean": "0.6.0",
|
||||
"grunt-contrib-copy": "0.8.1",
|
||||
"grunt-esvm": "2.1.1",
|
||||
"grunt-esvm": "3.0.4",
|
||||
"grunt-karma": "0.12.0",
|
||||
"grunt-run": "0.5.0",
|
||||
"grunt-s3": "0.2.0-alpha.3",
|
||||
|
@ -174,12 +174,12 @@
|
|||
"karma-ie-launcher": "0.2.0",
|
||||
"karma-mocha": "0.2.0",
|
||||
"karma-safari-launcher": "0.1.1",
|
||||
"libesvm": "3.3.0",
|
||||
"license-checker": "3.1.0",
|
||||
"load-grunt-config": "0.7.2",
|
||||
"load-grunt-config": "0.19.1",
|
||||
"makelogs": "3.0.0-beta3",
|
||||
"marked-text-renderer": "0.1.0",
|
||||
"mocha": "2.3.0",
|
||||
"ncp": "2.0.0",
|
||||
"nock": "2.10.0",
|
||||
"npm": "2.11.0",
|
||||
"portscanner": "1.0.0",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import _ from 'lodash';
|
||||
|
||||
import pkg from '../utils/packageJson';
|
||||
import Command from './Command';
|
||||
import pkg from '../utils/package_json';
|
||||
import Command from './command';
|
||||
|
||||
let argv = process.env.kbnWorkerArgv ? JSON.parse(process.env.kbnWorkerArgv) : process.argv.slice();
|
||||
let program = new Command('bin/kibana');
|
||||
|
|
|
@ -4,7 +4,7 @@ const { format: formatUrl } = require('url');
|
|||
import Hapi from 'hapi';
|
||||
const { debounce, compact, get, invoke, bindAll, once, sample, uniq } = require('lodash');
|
||||
|
||||
import Log from '../Log';
|
||||
import Log from '../log';
|
||||
import Worker from './worker';
|
||||
import BasePathProxy from './base_path_proxy';
|
||||
|
||||
|
@ -83,7 +83,7 @@ module.exports = class ClusterManager {
|
|||
|
||||
setupWatching(extraPaths) {
|
||||
const chokidar = require('chokidar');
|
||||
const fromRoot = require('../../utils/fromRoot');
|
||||
const fromRoot = require('../../utils/from_root');
|
||||
|
||||
const watchPaths = uniq(
|
||||
[
|
||||
|
|
|
@ -3,7 +3,7 @@ import cluster from 'cluster';
|
|||
let { resolve } = require('path');
|
||||
let { EventEmitter } = require('events');
|
||||
|
||||
import fromRoot from '../../utils/fromRoot';
|
||||
import fromRoot from '../../utils/from_root';
|
||||
|
||||
let cliPath = fromRoot('src/cli');
|
||||
let baseArgs = _.difference(process.argv.slice(2), ['--no-watch']);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// load the babel options seperately so that they can modify the process.env
|
||||
// before calling babel/register
|
||||
const babelOptions = require('../optimize/babelOptions').node;
|
||||
const babelOptions = require('../optimize/babel_options').node;
|
||||
require('babel/register')(babelOptions);
|
||||
require('./cli');
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import path from 'path';
|
||||
import expect from 'expect.js';
|
||||
|
||||
import fromRoot from '../../../utils/fromRoot';
|
||||
import fromRoot from '../../../utils/from_root';
|
||||
import settingParser from '../setting_parser';
|
||||
|
||||
describe('kibana cli', function () {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import fromRoot from '../../utils/fromRoot';
|
||||
import fromRoot from '../../utils/from_root';
|
||||
import settingParser from './setting_parser';
|
||||
import installer from './plugin_installer';
|
||||
import remover from './plugin_remover';
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
import _ from 'lodash';
|
||||
import fromRoot from '../../utils/fromRoot';
|
||||
import fromRoot from '../../utils/from_root';
|
||||
import pluginDownloader from './plugin_downloader';
|
||||
import pluginCleaner from './plugin_cleaner';
|
||||
import pluginExtractor from './plugin_extractor';
|
||||
import KbnServer from '../../server/KbnServer';
|
||||
import KbnServer from '../../server/kbn_server';
|
||||
import readYamlConfig from '../serve/read_yaml_config';
|
||||
import Promise from 'bluebird';
|
||||
import { sync as rimrafSync } from 'rimraf';
|
||||
|
|
|
@ -2,7 +2,7 @@ import _ from 'lodash';
|
|||
import fs from 'fs';
|
||||
import yaml from 'js-yaml';
|
||||
|
||||
import fromRoot from '../../utils/fromRoot';
|
||||
import fromRoot from '../../utils/from_root';
|
||||
|
||||
let legacySettingMap = {
|
||||
// server
|
||||
|
@ -48,7 +48,14 @@ module.exports = function (path) {
|
|||
_.forOwn(val, function (subVal, subKey) {
|
||||
apply(config, subVal, key + '.' + subKey);
|
||||
});
|
||||
} else {
|
||||
}
|
||||
else if (_.isArray(val)) {
|
||||
config[key] = [];
|
||||
val.forEach((subVal, i) => {
|
||||
apply(config, subVal, key + '.' + i);
|
||||
});
|
||||
}
|
||||
else {
|
||||
_.set(config, key, val);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ const { isWorker } = require('cluster');
|
|||
const { resolve } = require('path');
|
||||
|
||||
const cwd = process.cwd();
|
||||
import fromRoot from '../../utils/fromRoot';
|
||||
import fromRoot from '../../utils/from_root';
|
||||
|
||||
let canCluster;
|
||||
try {
|
||||
|
@ -126,7 +126,7 @@ module.exports = function (program) {
|
|||
}
|
||||
|
||||
let kbnServer = {};
|
||||
const KbnServer = require('../../server/KbnServer');
|
||||
const KbnServer = require('../../server/kbn_server');
|
||||
try {
|
||||
kbnServer = new KbnServer(settings);
|
||||
await kbnServer.ready();
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
module.exports = {
|
||||
export default {
|
||||
"took": 35,
|
||||
"timed_out": false,
|
||||
"_shards": {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import _ from 'lodash';
|
||||
import TestUtilsStubIndexPatternProvider from 'testUtils/stub_index_pattern';
|
||||
import TestUtilsStubIndexPatternProvider from 'test_utils/stub_index_pattern';
|
||||
import IndexPatternsFieldTypesProvider from 'ui/index_patterns/_field_types';
|
||||
import FixturesLogstashFieldsProvider from 'fixtures/logstash_fields';
|
||||
export default function stubbedLogstashIndexPatternService(Private) {
|
||||
|
|
|
@ -4,8 +4,8 @@ import DirectoryNameAsMain from 'webpack-directory-name-as-main';
|
|||
import ExtractTextPlugin from 'extract-text-webpack-plugin';
|
||||
import CommonsChunkPlugin from 'webpack/lib/optimize/CommonsChunkPlugin';
|
||||
|
||||
import fromRoot from '../utils/fromRoot';
|
||||
import babelOptions from './babelOptions';
|
||||
import fromRoot from '../utils/from_root';
|
||||
import babelOptions from './babel_options';
|
||||
import { inherits } from 'util';
|
||||
import { defaults, transform } from 'lodash';
|
||||
import { resolve } from 'path';
|
||||
|
@ -63,6 +63,7 @@ class BaseOptimizer {
|
|||
|
||||
getConfig() {
|
||||
let mapQ = this.sourceMaps ? '?sourceMap' : '';
|
||||
let mapQPre = mapQ ? mapQ + '&' : '?';
|
||||
|
||||
return {
|
||||
context: fromRoot('.'),
|
||||
|
@ -101,7 +102,7 @@ class BaseOptimizer {
|
|||
test: /\.less$/,
|
||||
loader: ExtractTextPlugin.extract(
|
||||
'style',
|
||||
`css${mapQ}!autoprefixer${mapQ ? mapQ + '&' : '?'}{ "browsers": ["last 2 versions","> 5%"] }!less${mapQ}`
|
||||
`css${mapQ}!autoprefixer${mapQPre}{ "browsers": ["last 2 versions","> 5%"] }!less${mapQPre}dumpLineNumbers=comments`
|
||||
)
|
||||
},
|
||||
{ test: /\.css$/, loader: ExtractTextPlugin.extract('style', `css${mapQ}`) },
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
import BaseOptimizer from './BaseOptimizer';
|
||||
import fromRoot from '../utils/fromRoot';
|
||||
import BaseOptimizer from './base_optimizer';
|
||||
import fromRoot from '../utils/from_root';
|
||||
import { fromNode } from 'bluebird';
|
||||
import { writeFile } from 'fs';
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
import FsOptimizer from './FsOptimizer';
|
||||
import FsOptimizer from './fs_optimizer';
|
||||
module.exports = async (kbnServer, server, config) => {
|
||||
if (!config.get('optimize.enabled')) return;
|
||||
|
||||
|
|
|
@ -21,11 +21,11 @@ module.exports = async (kbnServer, server, config) => {
|
|||
*/
|
||||
switch (process.env.kbnWorkerType) {
|
||||
case 'optmzr':
|
||||
await kbnServer.mixin(require('./optmzrRole'));
|
||||
await kbnServer.mixin(require('./optmzr_role'));
|
||||
break;
|
||||
|
||||
case 'server':
|
||||
await kbnServer.mixin(require('./proxyRole'));
|
||||
await kbnServer.mixin(require('./proxy_role'));
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import Boom from 'boom';
|
||||
|
||||
import BaseOptimizer from '../BaseOptimizer';
|
||||
import WeirdControlFlow from './WeirdControlFlow';
|
||||
import BaseOptimizer from '../base_optimizer';
|
||||
import WeirdControlFlow from './weird_control_flow';
|
||||
import { once, pick, size } from 'lodash';
|
||||
import { join } from 'path';
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
import LazyServer from './LazyServer';
|
||||
import LazyOptimizer from './LazyOptimizer';
|
||||
import fromRoot from '../../utils/fromRoot';
|
||||
import LazyServer from './lazy_server';
|
||||
import LazyOptimizer from './lazy_optimizer';
|
||||
import fromRoot from '../../utils/from_root';
|
||||
|
||||
export default async (kbnServer, kibanaHapiServer, config) => {
|
||||
let server = new LazyServer(
|
|
@ -1,9 +1,9 @@
|
|||
module.exports = (kibana) => {
|
||||
export default (kibana) => {
|
||||
if (!kibana.config.get('env.dev')) return;
|
||||
return new kibana.Plugin({
|
||||
uiExports: {
|
||||
spyModes: [
|
||||
'plugins/devMode/visDebugSpyPanel'
|
||||
'plugins/dev_mode/vis_debug_spy_panel'
|
||||
]
|
||||
}
|
||||
});
|
|
@ -1,4 +1,4 @@
|
|||
{
|
||||
"name": "devMode",
|
||||
"name": "dev_mode",
|
||||
"version": "1.0.0"
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
import visDebugSpyPanelTemplate from 'plugins/devMode/visDebugSpyPanel.html';
|
||||
import visDebugSpyPanelTemplate from 'plugins/dev_mode/vis_debug_spy_panel.html';
|
||||
// register the spy mode or it won't show up in the spys
|
||||
require('ui/registry/spy_modes').register(VisDetailsSpyProvider);
|
||||
|
|
@ -33,6 +33,16 @@ module.exports = function ({ Plugin }) {
|
|||
}).default();
|
||||
},
|
||||
|
||||
uiExports: {
|
||||
injectDefaultVars(server, options) {
|
||||
return {
|
||||
esRequestTimeout: options.requestTimeout,
|
||||
esShardTimeout: options.shardTimeout,
|
||||
esApiVersion: options.apiVersion,
|
||||
};
|
||||
}
|
||||
},
|
||||
|
||||
init(server, options) {
|
||||
const kibanaIndex = server.config().get('kibana.index');
|
||||
|
||||
|
@ -54,7 +64,7 @@ module.exports = function ({ Plugin }) {
|
|||
return reply.continue();
|
||||
}
|
||||
|
||||
function noCreateIndex({ path }, reply) {
|
||||
function noDirectIndex({ path }, reply) {
|
||||
const requestPath = trimRight(trim(path), '/');
|
||||
const matchPath = createPath(kibanaIndex);
|
||||
|
||||
|
@ -75,7 +85,7 @@ module.exports = function ({ Plugin }) {
|
|||
['PUT', 'POST', 'DELETE'],
|
||||
`/${kibanaIndex}/{paths*}`,
|
||||
{
|
||||
pre: [ noCreateIndex, noBulkCheck ]
|
||||
pre: [ noDirectIndex, noBulkCheck ]
|
||||
}
|
||||
);
|
||||
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
import _ from 'lodash';
|
||||
import Promise from 'bluebird';
|
||||
import sinon from 'sinon';
|
||||
import url from 'url';
|
||||
|
||||
import serverConfig from '../../../../../test/server_config';
|
||||
import checkEsVersion from '../check_es_version';
|
||||
|
||||
describe('plugins/elasticsearch', function () {
|
||||
|
@ -23,7 +25,7 @@ describe('plugins/elasticsearch', function () {
|
|||
status: {
|
||||
red: sinon.stub()
|
||||
},
|
||||
url: 'http://localhost:9210'
|
||||
url: url.format(serverConfig.servers.elasticsearch)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -1,9 +1,15 @@
|
|||
import Promise from 'bluebird';
|
||||
import sinon from 'sinon';
|
||||
import expect from 'expect.js';
|
||||
import url from 'url';
|
||||
|
||||
const NoConnections = require('elasticsearch').errors.NoConnections;
|
||||
|
||||
import healthCheck from '../health_check';
|
||||
import serverConfig from '../../../../../test/server_config';
|
||||
|
||||
const esPort = serverConfig.servers.elasticsearch.port;
|
||||
const esUrl = url.format(serverConfig.servers.elasticsearch);
|
||||
|
||||
describe('plugins/elasticsearch', function () {
|
||||
describe('lib/health_check', function () {
|
||||
|
@ -39,7 +45,7 @@ describe('plugins/elasticsearch', function () {
|
|||
nodes: {
|
||||
'node-01': {
|
||||
version: '1.5.0',
|
||||
http_address: 'inet[/127.0.0.1:9210]',
|
||||
http_address: `inet[/127.0.0.1:${esPort}]`,
|
||||
ip: '127.0.0.1'
|
||||
}
|
||||
}
|
||||
|
@ -73,7 +79,7 @@ describe('plugins/elasticsearch', function () {
|
|||
|
||||
it('should set the cluster red if the ping fails, then to green', function () {
|
||||
|
||||
get.withArgs('elasticsearch.url').returns('http://localhost:9210');
|
||||
get.withArgs('elasticsearch.url').returns(esUrl);
|
||||
get.withArgs('elasticsearch.engineVersion').returns('^1.4.4');
|
||||
get.withArgs('kibana.index').returns('.my-kibana');
|
||||
client.ping.onCall(0).returns(Promise.reject(new NoConnections()));
|
||||
|
@ -85,7 +91,7 @@ describe('plugins/elasticsearch', function () {
|
|||
expect(plugin.status.yellow.args[0][0]).to.be('Waiting for Elasticsearch');
|
||||
sinon.assert.calledOnce(plugin.status.red);
|
||||
expect(plugin.status.red.args[0][0]).to.be(
|
||||
'Unable to connect to Elasticsearch at http://localhost:9210.'
|
||||
`Unable to connect to Elasticsearch at ${esUrl}.`
|
||||
);
|
||||
sinon.assert.calledTwice(client.ping);
|
||||
sinon.assert.calledOnce(client.nodes.info);
|
||||
|
@ -97,7 +103,7 @@ describe('plugins/elasticsearch', function () {
|
|||
});
|
||||
|
||||
it('should set the cluster red if the health check status is red, then to green', function () {
|
||||
get.withArgs('elasticsearch.url').returns('http://localhost:9210');
|
||||
get.withArgs('elasticsearch.url').returns(esUrl);
|
||||
get.withArgs('elasticsearch.engineVersion').returns('^1.4.4');
|
||||
get.withArgs('kibana.index').returns('.my-kibana');
|
||||
client.ping.returns(Promise.resolve());
|
||||
|
@ -120,7 +126,7 @@ describe('plugins/elasticsearch', function () {
|
|||
});
|
||||
|
||||
it('should set the cluster yellow if the health check timed_out and create index', function () {
|
||||
get.withArgs('elasticsearch.url').returns('http://localhost:9210');
|
||||
get.withArgs('elasticsearch.url').returns(esUrl);
|
||||
get.withArgs('elasticsearch.engineVersion').returns('^1.4.4');
|
||||
get.withArgs('kibana.index').returns('.my-kibana');
|
||||
client.ping.returns(Promise.resolve());
|
||||
|
|
|
@ -3,11 +3,11 @@ import expect from 'expect.js';
|
|||
import sinon from 'sinon';
|
||||
|
||||
import isUpgradeable from '../is_upgradeable';
|
||||
import pkg from '../../../../utils/packageJson';
|
||||
import pkg from '../../../../utils/package_json';
|
||||
let version = pkg.version;
|
||||
|
||||
describe('plugins/elasticsearch', function () {
|
||||
describe('lib/isUpgradeable', function () {
|
||||
describe('lib/is_upgradeable', function () {
|
||||
let server = {
|
||||
config: _.constant({
|
||||
get: function (key) {
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
import expect from 'expect.js';
|
||||
import util from 'util';
|
||||
import { format } from 'util';
|
||||
|
||||
import * as kbnTestServer from '../../../../../test/utils/kbn_server';
|
||||
|
||||
const format = util.format;
|
||||
|
||||
import fromRoot from '../../../../utils/from_root';
|
||||
|
||||
describe('plugins/elasticsearch', function () {
|
||||
describe('routes', function () {
|
||||
|
@ -13,7 +12,13 @@ describe('plugins/elasticsearch', function () {
|
|||
before(function () {
|
||||
this.timeout(60000); // sometimes waiting for server takes longer than 10
|
||||
|
||||
kbnServer = kbnTestServer.createServer();
|
||||
kbnServer = kbnTestServer.createServer({
|
||||
plugins: {
|
||||
scanDirs: [
|
||||
fromRoot('src/plugins')
|
||||
]
|
||||
}
|
||||
});
|
||||
return kbnServer.ready()
|
||||
.then(() => kbnServer.server.plugins.elasticsearch.waitUntilReady());
|
||||
});
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
import SetupError from './setup_error';
|
||||
import { format } from 'util';
|
||||
import { mappings } from './kibana_index_mappings';
|
||||
|
||||
module.exports = function (server) {
|
||||
const client = server.plugins.elasticsearch.client;
|
||||
const index = server.config().get('kibana.index');
|
||||
|
@ -16,16 +18,7 @@ module.exports = function (server) {
|
|||
settings: {
|
||||
number_of_shards: 1
|
||||
},
|
||||
mappings: {
|
||||
config: {
|
||||
properties: {
|
||||
buildNum: {
|
||||
type: 'string',
|
||||
index: 'not_analyzed'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
mappings
|
||||
}
|
||||
})
|
||||
.catch(handleError('Unable to create Kibana index "<%= kibana.index %>"'))
|
||||
|
|
|
@ -9,6 +9,19 @@ import callWithRequest from './call_with_request';
|
|||
module.exports = function (server) {
|
||||
const config = server.config();
|
||||
|
||||
class ElasticsearchClientLogging {
|
||||
error(err) {
|
||||
server.log(['error', 'elasticsearch'], err);
|
||||
}
|
||||
warning(message) {
|
||||
server.log(['warning', 'elasticsearch'], message);
|
||||
}
|
||||
info() {}
|
||||
debug() {}
|
||||
trace() {}
|
||||
close() {}
|
||||
}
|
||||
|
||||
function createClient(options) {
|
||||
options = _.defaults(options || {}, {
|
||||
url: config.get('elasticsearch.url'),
|
||||
|
@ -52,18 +65,7 @@ module.exports = function (server) {
|
|||
defer: function () {
|
||||
return Bluebird.defer();
|
||||
},
|
||||
log: function () {
|
||||
this.error = function (err) {
|
||||
server.log(['error', 'elasticsearch'], err);
|
||||
};
|
||||
this.warning = function (message) {
|
||||
server.log(['warning', 'elasticsearch'], message);
|
||||
};
|
||||
this.info = _.noop;
|
||||
this.debug = _.noop;
|
||||
this.trace = _.noop;
|
||||
this.close = _.noop;
|
||||
}
|
||||
log: ElasticsearchClientLogging
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -73,6 +75,7 @@ module.exports = function (server) {
|
|||
const noAuthClient = createClient({ auth: false });
|
||||
server.on('close', _.bindKey(noAuthClient, 'close'));
|
||||
|
||||
server.expose('ElasticsearchClientLogging', ElasticsearchClientLogging);
|
||||
server.expose('client', client);
|
||||
server.expose('createClient', createClient);
|
||||
server.expose('callWithRequestFactory', callWithRequest);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
module.exports = function getBasicAuthRealm(message) {
|
||||
export default function getBasicAuthRealm(message) {
|
||||
if (!message || typeof message !== 'string') return null;
|
||||
|
||||
const parts = message.match(/Basic\ realm=\\"(.*)\\"/);
|
||||
|
|
10
src/plugins/elasticsearch/lib/kibana_index_mappings.js
Normal file
10
src/plugins/elasticsearch/lib/kibana_index_mappings.js
Normal file
|
@ -0,0 +1,10 @@
|
|||
export const mappings = {
|
||||
config: {
|
||||
properties: {
|
||||
buildNum: {
|
||||
type: 'string',
|
||||
index: 'not_analyzed'
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
|
@ -1,4 +1,5 @@
|
|||
import upgrade from './upgrade_config';
|
||||
import { mappings } from './kibana_index_mappings';
|
||||
|
||||
module.exports = function (server) {
|
||||
const config = server.config();
|
||||
|
@ -8,11 +9,16 @@ module.exports = function (server) {
|
|||
type: 'config',
|
||||
body: {
|
||||
size: 1000,
|
||||
sort: [ { buildNum: { order: 'desc', ignore_unmapped: true } } ]
|
||||
sort: [
|
||||
{
|
||||
buildNum: {
|
||||
order: 'desc',
|
||||
unmapped_type: mappings.config.properties.buildNum.type
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
return client.search(options).then(upgrade(server));
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
module.exports = function (kibana) {
|
||||
export default function (kibana) {
|
||||
|
||||
return new kibana.Plugin({
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ import angular from 'angular';
|
|||
import _ from 'lodash';
|
||||
import sinon from 'auto-release-sinon';
|
||||
import expect from 'expect.js';
|
||||
import ngMock from 'ngMock';
|
||||
import ngMock from 'ng_mock';
|
||||
import $ from 'jquery';
|
||||
import 'ui/render_directive';
|
||||
import 'plugins/kbn_doc_views/views/table';
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
module.exports = function (kibana) {
|
||||
export default function (kibana) {
|
||||
|
||||
return new kibana.Plugin({
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import VislibVisTypeVislibVisTypeProvider from 'ui/vislib_vis_type/VislibVisType';
|
||||
import VisSchemasProvider from 'ui/Vis/Schemas';
|
||||
import VislibVisTypeVislibVisTypeProvider from 'ui/vislib_vis_type/vislib_vis_type';
|
||||
import VisSchemasProvider from 'ui/vis/schemas';
|
||||
import areaTemplate from 'plugins/kbn_vislib_vis_types/editors/area.html';
|
||||
|
||||
export default function HistogramVisType(Private) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import VislibVisTypeVislibVisTypeProvider from 'ui/vislib_vis_type/VislibVisType';
|
||||
import VisSchemasProvider from 'ui/Vis/Schemas';
|
||||
import VislibVisTypeVislibVisTypeProvider from 'ui/vislib_vis_type/vislib_vis_type';
|
||||
import VisSchemasProvider from 'ui/vis/schemas';
|
||||
import histogramTemplate from 'plugins/kbn_vislib_vis_types/editors/histogram.html';
|
||||
|
||||
export default function HistogramVisType(Private) {
|
||||
|
|
|
@ -3,4 +3,4 @@ visTypes.register(require('plugins/kbn_vislib_vis_types/histogram'));
|
|||
visTypes.register(require('plugins/kbn_vislib_vis_types/line'));
|
||||
visTypes.register(require('plugins/kbn_vislib_vis_types/pie'));
|
||||
visTypes.register(require('plugins/kbn_vislib_vis_types/area'));
|
||||
visTypes.register(require('plugins/kbn_vislib_vis_types/tileMap'));
|
||||
visTypes.register(require('plugins/kbn_vislib_vis_types/tile_map'));
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import VislibVisTypeVislibVisTypeProvider from 'ui/vislib_vis_type/VislibVisType';
|
||||
import VisSchemasProvider from 'ui/Vis/Schemas';
|
||||
import VislibVisTypeVislibVisTypeProvider from 'ui/vislib_vis_type/vislib_vis_type';
|
||||
import VisSchemasProvider from 'ui/vis/schemas';
|
||||
import lineTemplate from 'plugins/kbn_vislib_vis_types/editors/line.html';
|
||||
|
||||
export default function HistogramVisType(Private) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import VislibVisTypeVislibVisTypeProvider from 'ui/vislib_vis_type/VislibVisType';
|
||||
import VisSchemasProvider from 'ui/Vis/Schemas';
|
||||
import VislibVisTypeVislibVisTypeProvider from 'ui/vislib_vis_type/vislib_vis_type';
|
||||
import VisSchemasProvider from 'ui/vis/schemas';
|
||||
import pieTemplate from 'plugins/kbn_vislib_vis_types/editors/pie.html';
|
||||
|
||||
export default function HistogramVisType(Private) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import _ from 'lodash';
|
||||
import supports from 'ui/utils/supports';
|
||||
import VislibVisTypeVislibVisTypeProvider from 'ui/vislib_vis_type/VislibVisType';
|
||||
import VisSchemasProvider from 'ui/Vis/Schemas';
|
||||
import VislibVisTypeVislibVisTypeProvider from 'ui/vislib_vis_type/vislib_vis_type';
|
||||
import VisSchemasProvider from 'ui/vis/schemas';
|
||||
import AggResponseGeoJsonGeoJsonProvider from 'ui/agg_response/geo_json/geo_json';
|
||||
import FilterBarPushFilterProvider from 'ui/filter_bar/push_filter';
|
||||
import tileMapTemplate from 'plugins/kbn_vislib_vis_types/editors/tile_map.html';
|
|
@ -1,8 +1,9 @@
|
|||
import ingest from './server/routes/api/ingest';
|
||||
import search from './server/routes/api/search';
|
||||
|
||||
module.exports = function (kibana) {
|
||||
return new kibana.Plugin({
|
||||
|
||||
id: 'kibana',
|
||||
config: function (Joi) {
|
||||
return Joi.object({
|
||||
enabled: Joi.boolean().default(true),
|
||||
|
@ -13,7 +14,9 @@ module.exports = function (kibana) {
|
|||
|
||||
uiExports: {
|
||||
app: {
|
||||
id: 'kibana',
|
||||
title: 'Kibana',
|
||||
listed: false,
|
||||
description: 'the kibana you know and love',
|
||||
//icon: 'plugins/kibana/settings/sections/about/barcode.svg',
|
||||
main: 'plugins/kibana/kibana',
|
||||
|
@ -32,12 +35,49 @@ module.exports = function (kibana) {
|
|||
return {
|
||||
kbnDefaultAppId: config.get('kibana.defaultAppId')
|
||||
};
|
||||
},
|
||||
},
|
||||
|
||||
links: [
|
||||
{
|
||||
title: 'Discover',
|
||||
order: -1003,
|
||||
url: '/app/kibana#/discover',
|
||||
description: 'interactively explore your data',
|
||||
icon: 'plugins/kibana/assets/discover.svg',
|
||||
},
|
||||
{
|
||||
title: 'Visualize',
|
||||
order: -1002,
|
||||
url: '/app/kibana#/visualize',
|
||||
description: 'design data visualizations',
|
||||
icon: 'plugins/kibana/assets/visualize.svg',
|
||||
},
|
||||
{
|
||||
title: 'Dashboard',
|
||||
order: -1001,
|
||||
url: '/app/kibana#/dashboard',
|
||||
description: 'compose visualizations for much win',
|
||||
icon: 'plugins/kibana/assets/dashboard.svg',
|
||||
},
|
||||
{
|
||||
title: 'Settings',
|
||||
order: 1000,
|
||||
url: '/app/kibana#/settings',
|
||||
description: 'define index patterns, change config, and more',
|
||||
icon: 'plugins/kibana/assets/settings.svg',
|
||||
}
|
||||
}
|
||||
],
|
||||
injectDefaultVars(server, options) {
|
||||
return {
|
||||
kbnIndex: options.index
|
||||
};
|
||||
},
|
||||
},
|
||||
|
||||
init: function (server, options) {
|
||||
ingest(server);
|
||||
search(server);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
4
src/plugins/kibana/public/assets/dashboard.svg
Executable file
4
src/plugins/kibana/public/assets/dashboard.svg
Executable file
|
@ -0,0 +1,4 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8" viewBox="0 0 8 8">
|
||||
<path d="M4 0c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4zm0 1c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 1c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm-1.66 1a.5.5 0 0 0-.19.84l.91.91c-.02.08-.06.16-.06.25 0 .55.45 1 1 1s1-.45 1-1-.45-1-1-1c-.09 0-.17.04-.25.06l-.91-.91a.5.5 0 0 0-.44-.16.5.5 0 0 0-.06 0zm3.16 0c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5z"
|
||||
/>
|
||||
</svg>
|
After Width: | Height: | Size: 486 B |
3
src/plugins/kibana/public/assets/discover.svg
Executable file
3
src/plugins/kibana/public/assets/discover.svg
Executable file
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8" viewBox="0 0 8 8">
|
||||
<path d="M4 0c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4zm0 1c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm2 1l-3 1-1 3 3-1 1-3zm-2 1.5c.28 0 .5.22.5.5s-.22.5-.5.5-.5-.22-.5-.5.22-.5.5-.5z" />
|
||||
</svg>
|
After Width: | Height: | Size: 293 B |
3
src/plugins/kibana/public/assets/logout.svg
Executable file
3
src/plugins/kibana/public/assets/logout.svg
Executable file
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8" viewBox="0 0 8 8">
|
||||
<path d="M3 0v1h4v5h-4v1h5v-7h-5zm-1 2l-2 1.5 2 1.5v-1h4v-1h-4v-1z" />
|
||||
</svg>
|
After Width: | Height: | Size: 159 B |
4
src/plugins/kibana/public/assets/search.svg
Executable file
4
src/plugins/kibana/public/assets/search.svg
Executable file
|
@ -0,0 +1,4 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8" viewBox="0 0 8 8">
|
||||
<path d="M3.5 0c-1.93 0-3.5 1.57-3.5 3.5s1.57 3.5 3.5 3.5c.59 0 1.17-.14 1.66-.41a1 1 0 0 0 .13.13l1 1a1.02 1.02 0 1 0 1.44-1.44l-1-1a1 1 0 0 0-.16-.13c.27-.49.44-1.06.44-1.66 0-1.93-1.57-3.5-3.5-3.5zm0 1c1.39 0 2.5 1.11 2.5 2.5 0 .66-.24 1.27-.66 1.72-.01.01-.02.02-.03.03a1 1 0 0 0-.13.13c-.44.4-1.04.63-1.69.63-1.39 0-2.5-1.11-2.5-2.5s1.11-2.5 2.5-2.5z"
|
||||
/>
|
||||
</svg>
|
After Width: | Height: | Size: 450 B |
4
src/plugins/kibana/public/assets/settings.svg
Executable file
4
src/plugins/kibana/public/assets/settings.svg
Executable file
|
@ -0,0 +1,4 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8" viewBox="0 0 8 8">
|
||||
<path d="M3.5 0l-.5 1.19c-.1.03-.19.08-.28.13l-1.19-.5-.72.72.5 1.19c-.05.1-.09.18-.13.28l-1.19.5v1l1.19.5c.04.1.08.18.13.28l-.5 1.19.72.72 1.19-.5c.09.04.18.09.28.13l.5 1.19h1l.5-1.19c.09-.04.19-.08.28-.13l1.19.5.72-.72-.5-1.19c.04-.09.09-.19.13-.28l1.19-.5v-1l-1.19-.5c-.03-.09-.08-.19-.13-.28l.5-1.19-.72-.72-1.19.5c-.09-.04-.19-.09-.28-.13l-.5-1.19h-1zm.5 2.5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5-1.5-.67-1.5-1.5.67-1.5 1.5-1.5z"
|
||||
/>
|
||||
</svg>
|
After Width: | Height: | Size: 528 B |
3
src/plugins/kibana/public/assets/visualize.svg
Executable file
3
src/plugins/kibana/public/assets/visualize.svg
Executable file
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8" viewBox="0 0 8 8">
|
||||
<path d="M0 0v7h8v-1h-7v-6h-1zm5 0v5h2v-5h-2zm-3 2v3h2v-3h-2z" />
|
||||
</svg>
|
After Width: | Height: | Size: 154 B |
|
@ -1,18 +1,15 @@
|
|||
<div class="panel panel-default" ng-switch on="panel.type" ng-if="savedObj || error">
|
||||
<div class="panel-heading">
|
||||
<span class="panel-title" title="{{::savedObj.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>
|
||||
</a>
|
||||
<a aria-label="Move" ng-show="chrome.getVisible()" class="panel-move">
|
||||
<i aria-hidden="true" class="fa fa-arrows"></i>
|
||||
</a>
|
||||
<a aria-label="Remove" ng-show="chrome.getVisible()" ng-click="remove()">
|
||||
<i aria-hidden="true" class="fa fa-times"></i>
|
||||
</a>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import _ from 'lodash';
|
||||
import $ from 'jquery';
|
||||
import Binder from 'ui/Binder';
|
||||
import Binder from 'ui/binder';
|
||||
import 'gridster';
|
||||
import uiModules from 'ui/modules';
|
||||
|
||||
|
@ -27,7 +27,7 @@ app.directive('dashboardGrid', function ($compile, Notifier) {
|
|||
// number of columns to render
|
||||
const COLS = 12;
|
||||
// number of pixed between each column/row
|
||||
const SPACER = 10;
|
||||
const SPACER = 0;
|
||||
// pixels used by all of the spacers (gridster puts have a spacer on the ends)
|
||||
const spacerSize = SPACER * COLS;
|
||||
|
||||
|
@ -46,7 +46,7 @@ app.directive('dashboardGrid', function ($compile, Notifier) {
|
|||
stop: readGridsterChangeHandler
|
||||
},
|
||||
draggable: {
|
||||
handle: '.panel-heading, .panel-title',
|
||||
handle: '.panel-move, .fa-arrows',
|
||||
stop: readGridsterChangeHandler
|
||||
}
|
||||
}).data('gridster');
|
||||
|
@ -232,4 +232,3 @@ app.directive('dashboardGrid', function ($compile, Notifier) {
|
|||
}
|
||||
};
|
||||
});
|
||||
|
||||
|
|
|
@ -1,7 +1,62 @@
|
|||
<div dashboard-app class="app-container dashboard-container">
|
||||
<navbar ng-show="chrome.getVisible()" name="dashboard">
|
||||
<span class="name" ng-if="dash.id" ng-bind="::dash.title" tooltip="{{::dash.title}}"></span>
|
||||
<navbar name="dashboard-options" class="kibana-nav-options">
|
||||
<div class="kibana-nav-info">
|
||||
<span ng-show="dash.id" class="kibana-nav-info-title">
|
||||
<span ng-bind="::dash.title"></span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="button-group kibana-nav-actions" role="toolbar">
|
||||
<button ng-click="newDashboard()"
|
||||
aria-label="New Dashboard">
|
||||
<span>New</span>
|
||||
</button>
|
||||
<button
|
||||
aria-label="Save Dashboard"
|
||||
aria-haspopup="false"
|
||||
aria-expanded="{{ configTemplate.is('save') }}"
|
||||
ng-class="{active: configTemplate.is('save')}"
|
||||
ng-click="configTemplate.toggle('save');">
|
||||
<span>Save</span>
|
||||
</button>
|
||||
<button
|
||||
aria-label="Load Saved Dashboard"
|
||||
aria-haspopup="false"
|
||||
aria-expanded="{{ configTemplate.is('load') }}"
|
||||
ng-class="{active: configTemplate.is('load')}"
|
||||
ng-click="configTemplate.toggle('load');">
|
||||
<span>Open</span>
|
||||
</button>
|
||||
<button
|
||||
aria-label="Share Dashboard"
|
||||
aria-haspopup="false"
|
||||
aria-expanded="{{ configTemplate.is('share') }}"
|
||||
ng-class="{active: configTemplate.is('share')}"
|
||||
ng-click="configTemplate.toggle('share');">
|
||||
<span>Share</span>
|
||||
</button>
|
||||
<button
|
||||
aria-label="Add Visualization"
|
||||
aria-haspopup="false"
|
||||
aria-expanded="{{ configTemplate.is('pickVis') }}"
|
||||
ng-class="{active: configTemplate.is('pickVis')}"
|
||||
ng-click="configTemplate.toggle('pickVis');">
|
||||
<span>Add visualization</span>
|
||||
</button>
|
||||
<button
|
||||
aria-label="Options"
|
||||
aria-haspopup="false"
|
||||
aria-expanded="{{ configTemplate.is('options') }}"
|
||||
ng-class="{active: configTemplate.is('options')}"
|
||||
ng-click="configTemplate.toggle('options');">
|
||||
<span>Options</span>
|
||||
</button>
|
||||
<div class="chrome-actions"kbn-chrome-append-nav-controls></div>
|
||||
</div>
|
||||
</navbar>
|
||||
<config config-template="configTemplate" config-object="opts"></config>
|
||||
|
||||
<navbar ng-show="chrome.getVisible()" name="dashboard-search">
|
||||
<form name="queryInput"
|
||||
class="fill inline-form"
|
||||
ng-submit="filterResults()"
|
||||
|
@ -29,66 +84,9 @@
|
|||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
<div class="button-group" role="toolbar">
|
||||
<kbn-tooltip text="New Dashboard" placement="bottom" append-to-body="1">
|
||||
<button ng-click="newDashboard()" aria-label="New Dashboard"><i aria-hidden="true" class="fa fa-file-new-o"></i></button>
|
||||
</kbn-tooltip>
|
||||
<kbn-tooltip text="Save Dashboard" placement="bottom" append-to-body="1">
|
||||
<button
|
||||
aria-label="Save Dashboard"
|
||||
aria-haspopup="true"
|
||||
aria-expanded="{{ configTemplate.is('save') }}"
|
||||
ng-class="{active: configTemplate.is('save')}"
|
||||
ng-click="configTemplate.toggle('save');">
|
||||
<i aria-hidden="true" class="fa fa-save"></i>
|
||||
</button>
|
||||
</kbn-tooltip>
|
||||
<kbn-tooltip text="Load Saved Dashboard" placement="bottom" append-to-body="1">
|
||||
<button
|
||||
aria-label="Load Saved Dashboard"
|
||||
aria-haspopup="true"
|
||||
aria-expanded="{{ configTemplate.is('load') }}"
|
||||
ng-class="{active: configTemplate.is('load')}"
|
||||
ng-click="configTemplate.toggle('load');">
|
||||
<i aria-hidden="true" class="fa fa-folder-open-o"></i>
|
||||
</button>
|
||||
</kbn-tooltip>
|
||||
<kbn-tooltip text="Share" placement="bottom" append-to-body="1">
|
||||
<button
|
||||
aria-label="Share Dashboard"
|
||||
aria-haspopup="true"
|
||||
aria-expanded="{{ configTemplate.is('share') }}"
|
||||
ng-class="{active: configTemplate.is('share')}"
|
||||
ng-click="configTemplate.toggle('share');">
|
||||
<i aria-hidden="true" class="fa fa-external-link"></i>
|
||||
</button>
|
||||
</kbn-tooltip>
|
||||
<kbn-tooltip text="Add Visualization" placement="bottom" append-to-body="1">
|
||||
<button
|
||||
aria-label="Add Visualization"
|
||||
aria-haspopup="true"
|
||||
aria-expanded="{{ configTemplate.is('pickVis') }}"
|
||||
ng-class="{active: configTemplate.is('pickVis')}"
|
||||
ng-click="configTemplate.toggle('pickVis');">
|
||||
<i aria-hidden="true" class="fa fa-plus-circle"></i>
|
||||
</button>
|
||||
</kbn-tooltip>
|
||||
<kbn-tooltip text="Options" placement="bottom" append-to-body="1">
|
||||
<button
|
||||
aria-label="Options"
|
||||
aria-haspopup="true"
|
||||
aria-expanded="{{ configTemplate.is('options') }}"
|
||||
ng-class="{active: configTemplate.is('options')}"
|
||||
ng-click="configTemplate.toggle('options');">
|
||||
<i aria-hidden="true" class="fa fa-gear"></i>
|
||||
</button>
|
||||
</kbn-tooltip>
|
||||
</div>
|
||||
<div class="button-group"></div>
|
||||
</navbar>
|
||||
|
||||
<config config-template="configTemplate" config-object="opts"></config>
|
||||
|
||||
<filter-bar state="state"></filter-bar>
|
||||
|
||||
<div ng-show="!state.panels.length" class="text-center start-screen">
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import _ from 'lodash';
|
||||
import $ from 'jquery';
|
||||
import angular from 'angular';
|
||||
import ConfigTemplate from 'ui/ConfigTemplate';
|
||||
import ConfigTemplate from 'ui/config_template';
|
||||
import chrome from 'ui/chrome';
|
||||
import 'ui/directives/config';
|
||||
import 'ui/courier';
|
||||
|
@ -105,7 +105,9 @@ app.directive('dashboardApp', function (Notifier, courier, AppState, timefilter,
|
|||
load: require('plugins/kibana/dashboard/partials/load_dashboard.html'),
|
||||
share: require('plugins/kibana/dashboard/partials/share.html'),
|
||||
pickVis: require('plugins/kibana/dashboard/partials/pick_visualization.html'),
|
||||
options: require('plugins/kibana/dashboard/partials/options.html')
|
||||
options: require('plugins/kibana/dashboard/partials/options.html'),
|
||||
filter: require('ui/chrome/config/filter.html'),
|
||||
interval: require('ui/chrome/config/interval.html')
|
||||
});
|
||||
|
||||
$scope.refresh = _.bindKey(courier, 'fetch');
|
||||
|
@ -239,7 +241,8 @@ app.directive('dashboardApp', function (Notifier, courier, AppState, timefilter,
|
|||
ui: $state.options,
|
||||
save: $scope.save,
|
||||
addVis: $scope.addVis,
|
||||
addSearch: $scope.addSearch
|
||||
addSearch: $scope.addSearch,
|
||||
timefilter: $scope.timefilter
|
||||
};
|
||||
|
||||
init();
|
||||
|
|
|
@ -33,6 +33,24 @@ dashboard-grid {
|
|||
width: 25px;
|
||||
}
|
||||
|
||||
.gs-w {
|
||||
border: 2px dashed transparent;
|
||||
|
||||
&:hover {
|
||||
border-color: @kibanaGray4;
|
||||
|
||||
dashboard-panel {
|
||||
.visualize-show-spy {
|
||||
visibility: visible;
|
||||
}
|
||||
.panel .panel-heading .btn-group {
|
||||
display: block !important;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
i.remove {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
@ -55,15 +73,23 @@ dashboard-grid {
|
|||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: flex-start;
|
||||
border: 0 solid transparent;
|
||||
|
||||
.panel-heading {
|
||||
padding: 0px 0px 0px 5px;
|
||||
flex: 0 0 auto;
|
||||
white-space: nowrap;
|
||||
display: flex;
|
||||
border-top-right-radius: 0;
|
||||
border-top-left-radius: 0;
|
||||
background-color: @white;
|
||||
border: none;
|
||||
|
||||
div.btn-group {
|
||||
.btn-group {
|
||||
a {
|
||||
color: inherit;
|
||||
}
|
||||
display: none;
|
||||
white-space: nowrap;
|
||||
flex: 0 0 auto;
|
||||
}
|
||||
|
@ -85,6 +111,10 @@ dashboard-grid {
|
|||
}
|
||||
}
|
||||
|
||||
.panel-move:hover {
|
||||
cursor: move;
|
||||
}
|
||||
|
||||
a {
|
||||
color: @dashboard-panel-heading-link-color;
|
||||
border: none;
|
||||
|
@ -96,6 +126,10 @@ dashboard-grid {
|
|||
}
|
||||
}
|
||||
|
||||
.visualize-show-spy {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.load-error {
|
||||
text-align: center;
|
||||
font-size: 1em;
|
||||
|
@ -119,10 +153,6 @@ dashboard-grid {
|
|||
}
|
||||
}
|
||||
|
||||
.dashboard-panel-picker > li.list-group-item {
|
||||
border-top: 0px;
|
||||
}
|
||||
|
||||
.dashboard-load {
|
||||
margin: 10px;
|
||||
.dashboard-panel-picker > .list-group-item {
|
||||
border-top: 0;
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
import angular from 'angular';
|
||||
import _ from 'lodash';
|
||||
import sinon from 'auto-release-sinon';
|
||||
import ngMock from 'ngMock';
|
||||
import ngMock from 'ng_mock';
|
||||
import expect from 'expect.js';
|
||||
import $ from 'jquery';
|
||||
import 'ui/private';
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
import _ from 'lodash';
|
||||
import ngMock from 'ngMock';
|
||||
import ngMock from 'ng_mock';
|
||||
import fieldCalculator from 'plugins/kibana/discover/components/field_chooser/lib/field_calculator';
|
||||
import expect from 'expect.js';
|
||||
import 'ui/private';
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
import angular from 'angular';
|
||||
import ngMock from 'ngMock';
|
||||
import ngMock from 'ng_mock';
|
||||
import _ from 'lodash';
|
||||
import sinon from 'auto-release-sinon';
|
||||
import expect from 'expect.js';
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
import _ from 'lodash';
|
||||
import ngMock from 'ngMock';
|
||||
import ngMock from 'ng_mock';
|
||||
import expect from 'expect.js';
|
||||
import PluginsKibanaDiscoverHitSortFnProvider from 'plugins/kibana/discover/_hit_sort_fn';
|
||||
|
||||
|
|
|
@ -64,7 +64,6 @@ app.directive('discoverField', function ($compile) {
|
|||
$scope.toggle(field.name);
|
||||
if (field.display) $scope.increaseFieldCounter(field);
|
||||
|
||||
// we are now displaying the field, kill its details
|
||||
if (field.details) {
|
||||
$scope.toggleDetails(field);
|
||||
}
|
||||
|
@ -80,10 +79,11 @@ app.directive('discoverField', function ($compile) {
|
|||
|
||||
detailsElem = $(detailsHtml);
|
||||
$compile(detailsElem)(detailScope);
|
||||
$elem.append(detailsElem);
|
||||
$elem.append(detailsElem).addClass('active');
|
||||
} else {
|
||||
delete field.details;
|
||||
detailsElem.remove();
|
||||
$elem.removeClass('active');
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<div class="sidebar-list">
|
||||
<div ng-show="indexPatternList.length > 1">
|
||||
<div class="index-pattern" ng-click="showIndexPatternSelection = !showIndexPatternSelection">
|
||||
<div class="index-pattern" ng-click="showIndexPatternSelection = !showIndexPatternSelection"
|
||||
ng-class="{active: showIndexPatternSelection === true}">
|
||||
<div css-truncate title="{{indexPattern.id}}">{{indexPattern.id}}</div>
|
||||
<i ng-hide="showIndexPatternSelection" class="fa fa-caret-down"></i>
|
||||
<i ng-show="showIndexPatternSelection" class="fa fa-caret-up"></i>
|
||||
|
|
|
@ -3,8 +3,15 @@
|
|||
<h5 ng-show="!field.details.error">Quick Count <kbn-info info="Top 5 values based on documents in the table" placement="right"></kbn-info>
|
||||
<span ng-if="!field.details.error" class="small discover-field-details-count">
|
||||
(
|
||||
<a ng-show="field.indexed" ng-click="updateFilterInQuery('_exists_', field.name, '+')">{{::field.details.exists}}</a>
|
||||
<span ng-show="!field.indexed">{{::field.details.exists}}</span>
|
||||
<a
|
||||
ng-show="!indexPattern.metaFields.includes(field.name)"
|
||||
ng-click="updateFilterInQuery('_exists_', field.name, '+')">
|
||||
{{::field.details.exists}}
|
||||
</a>
|
||||
<span
|
||||
ng-show="indexPattern.metaFields.includes(field.name)">
|
||||
{{::field.details.exists}}
|
||||
</span>
|
||||
/{{::field.details.total}} records
|
||||
)
|
||||
</span>
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
import _ from 'lodash';
|
||||
import angular from 'angular';
|
||||
import moment from 'moment';
|
||||
import ConfigTemplate from 'ui/ConfigTemplate';
|
||||
import ConfigTemplate from 'ui/config_template';
|
||||
import getSort from 'ui/doc_table/lib/get_sort';
|
||||
import rison from 'ui/utils/rison';
|
||||
import dateMath from 'ui/utils/dateMath';
|
||||
import dateMath from 'ui/utils/date_math';
|
||||
import 'ui/doc_table';
|
||||
import 'ui/visualize';
|
||||
import 'ui/notify';
|
||||
import 'ui/fixedScroll';
|
||||
import 'ui/fixed_scroll';
|
||||
import 'ui/directives/validate_json';
|
||||
import 'ui/filters/moment';
|
||||
import 'ui/courier';
|
||||
|
@ -17,7 +17,7 @@ import 'ui/state_management/app_state';
|
|||
import 'ui/timefilter';
|
||||
import 'ui/highlight/highlight_tags';
|
||||
import 'ui/share';
|
||||
import VisProvider from 'ui/Vis';
|
||||
import VisProvider from 'ui/vis';
|
||||
import DocTitleProvider from 'ui/doc_title';
|
||||
import UtilsBrushEventProvider from 'ui/utils/brush_event';
|
||||
import PluginsKibanaDiscoverHitSortFnProvider from 'plugins/kibana/discover/_hit_sort_fn';
|
||||
|
@ -96,16 +96,17 @@ app.controller('discover', function ($scope, config, courier, $route, $window, N
|
|||
$scope.toggleInterval = function () {
|
||||
$scope.showInterval = !$scope.showInterval;
|
||||
};
|
||||
|
||||
// config panel templates
|
||||
$scope.configTemplate = new ConfigTemplate({
|
||||
load: require('plugins/kibana/discover/partials/load_search.html'),
|
||||
save: require('plugins/kibana/discover/partials/save_search.html'),
|
||||
share: require('plugins/kibana/discover/partials/share_search.html')
|
||||
share: require('plugins/kibana/discover/partials/share_search.html'),
|
||||
filter: require('ui/chrome/config/filter.html'),
|
||||
interval: require('ui/chrome/config/interval.html')
|
||||
});
|
||||
|
||||
$scope.timefilter = timefilter;
|
||||
|
||||
|
||||
// the saved savedSearch
|
||||
const savedSearch = $route.current.locals.savedSearch;
|
||||
$scope.$on('$destroy', savedSearch.destroy);
|
||||
|
@ -147,7 +148,8 @@ app.controller('discover', function ($scope, config, courier, $route, $window, N
|
|||
index: $scope.indexPattern.id,
|
||||
timefield: $scope.indexPattern.timeFieldName,
|
||||
savedSearch: savedSearch,
|
||||
indexPatternList: $route.current.locals.ip.list
|
||||
indexPatternList: $route.current.locals.ip.list,
|
||||
timefilter: $scope.timefilter
|
||||
};
|
||||
|
||||
const init = _.once(function () {
|
||||
|
|
|
@ -17,7 +17,7 @@ uiModules
|
|||
const init = function () {
|
||||
// This elem should already have a height/width
|
||||
const myChart = new vislib.Chart(elem[0], {
|
||||
|
||||
addLegend: false
|
||||
});
|
||||
|
||||
$scope.$watch('data', function (data) {
|
||||
|
|
|
@ -1,5 +1,53 @@
|
|||
<div ng-controller="discover" class="app-container">
|
||||
<navbar name="discover">
|
||||
<navbar name="discover-options" class="kibana-nav-options">
|
||||
<div class="kibana-nav-info">
|
||||
<span ng-show="opts.savedSearch.id" class="kibana-nav-info-title">
|
||||
<span ng-bind="::opts.savedSearch.title"></span>
|
||||
<i aria-label="Reload Saved Search" tooltip="Reload Saved Search" ng-click="resetQuery();" class="fa fa-undo small"></i>
|
||||
</span>
|
||||
|
||||
<strong class="discover-info-hits">{{(hits || 0) | number:0}}</strong>
|
||||
<ng-pluralize count="hits" when="{'1':'hit', 'other':'hits'}"></ng-pluralize>
|
||||
</div>
|
||||
<div class="kibana-nav-actions button-group" role="toolbar">
|
||||
<button
|
||||
ng-click="newQuery()"
|
||||
aria-label="New Search">
|
||||
<span>New</span>
|
||||
</button>
|
||||
<button
|
||||
ng-click="configTemplate.toggle('save');"
|
||||
ng-class="{active: configTemplate.is('save')}"
|
||||
aria-haspopup="false"
|
||||
aria-expanded="{{ configTemplate.is('save') }}"
|
||||
aria-label="Save Search">
|
||||
<span>Save</span>
|
||||
</button>
|
||||
<button
|
||||
aria-haspopup="false"
|
||||
aria-expanded="{{ configTemplate.is('load') }}"
|
||||
ng-click="configTemplate.toggle('load');"
|
||||
ng-class="{active: configTemplate.is('load')}"
|
||||
aria-label="Load Saved Search">
|
||||
<span>Open</span>
|
||||
</button>
|
||||
<button
|
||||
aria-label="Share Search"
|
||||
aria-haspopup="false"
|
||||
aria-expanded="{{ configTemplate.is('share') }}"
|
||||
ng-class="{active: configTemplate.is('share')}"
|
||||
ng-click="configTemplate.toggle('share');">
|
||||
<span>Share</span>
|
||||
</button>
|
||||
<div class="chrome-actions" kbn-chrome-append-nav-controls></div>
|
||||
</div>
|
||||
</navbar>
|
||||
<config
|
||||
config-template="configTemplate"
|
||||
config-object="opts"
|
||||
config-close="configClose"
|
||||
></config>
|
||||
<navbar name="discover-search">
|
||||
<form role="form" class="fill inline-form" ng-submit="fetch()" name="discoverSearch">
|
||||
<div class="typeahead" kbn-typeahead="discover">
|
||||
<div class="input-group"
|
||||
|
@ -21,49 +69,9 @@
|
|||
<kbn-typeahead-items></kbn-typeahead-items>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="button-group" role="toolbar">
|
||||
<kbn-tooltip text="New Search" placement="bottom" append-to-body="1">
|
||||
<button
|
||||
ng-click="newQuery()"
|
||||
aria-label="New Search">
|
||||
<i aria-hidden="true" class="fa fa-file-new-o"></i>
|
||||
</button>
|
||||
</kbn-tooltip>
|
||||
<kbn-tooltip text="Save Search" placement="bottom" append-to-body="1">
|
||||
<button
|
||||
ng-click="configTemplate.toggle('save');"
|
||||
ng-class="{active: configTemplate.is('save')}"
|
||||
aria-haspopup="true"
|
||||
aria-expanded="{{ configTemplate.is('save') }}"
|
||||
aria-label="Save Search">
|
||||
<i aria-hidden="true" class="fa fa-save"></i>
|
||||
</button>
|
||||
</kbn-tooltip>
|
||||
<kbn-tooltip text="Load Saved Search" placement="bottom" append-to-body="1">
|
||||
<button
|
||||
aria-haspopup="true"
|
||||
aria-expanded="{{ configTemplate.is('load') }}"
|
||||
ng-click="configTemplate.toggle('load');"
|
||||
ng-class="{active: configTemplate.is('load')}"
|
||||
aria-label="Load Saved Search">
|
||||
<i aria-hidden="true" class="fa fa-folder-open-o"></i>
|
||||
</button>
|
||||
</kbn-tooltip>
|
||||
<kbn-tooltip text="Share" placement="bottom" append-to-body="1">
|
||||
<button
|
||||
aria-label="Share Search"
|
||||
aria-haspopup="true"
|
||||
aria-expanded="{{ configTemplate.is('share') }}"
|
||||
ng-class="{active: configTemplate.is('share')}"
|
||||
ng-click="configTemplate.toggle('share');">
|
||||
<i aria-hidden="true" class="fa fa-external-link"></i>
|
||||
</button>
|
||||
</kbn-tooltip>
|
||||
</div>
|
||||
<div class="button-group" role="toolbar"></div>
|
||||
</navbar>
|
||||
|
||||
<config config-template="configTemplate" config-object="opts" config-close="configClose"></config>
|
||||
|
||||
<div class="container-fluid" role="main">
|
||||
<div class="row">
|
||||
|
@ -84,17 +92,6 @@
|
|||
</div>
|
||||
|
||||
<div class="discover-wrapper col-md-10">
|
||||
|
||||
<div class="discover-info">
|
||||
<span ng-show="opts.savedSearch.id" class="discover-info-title">
|
||||
<span ng-bind="::opts.savedSearch.title"></span>
|
||||
<i aria-label="Reload Saved Search" tooltip="Reload Saved Search" ng-click="resetQuery();" class="fa fa-undo small"></i>
|
||||
</span>
|
||||
|
||||
<strong class="discover-info-hits">{{(hits || 0) | number:0}}</strong>
|
||||
<ng-pluralize count="hits" when="{'1':'hit', 'other':'hits'}"></ng-pluralize>
|
||||
</div>
|
||||
|
||||
<div class="discover-content">
|
||||
<!-- no results -->
|
||||
<div ng-show="resultState === 'none'">
|
||||
|
@ -153,7 +150,6 @@
|
|||
<div ng-show="resultState === 'loading'">
|
||||
<div class="discover-overlay">
|
||||
<h2>Searching</h2>
|
||||
<div class="spinner large"></div>
|
||||
<div ng-show="fetchStatus">{{fetchStatus.complete}}/{{fetchStatus.total}}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -29,6 +29,10 @@
|
|||
height: 200px;
|
||||
max-height: 600px;
|
||||
|
||||
.loading {
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
&.only-spy {
|
||||
height: auto;
|
||||
|
||||
|
@ -71,12 +75,10 @@
|
|||
}
|
||||
|
||||
&-info {
|
||||
background-color: @discover-info-bg;
|
||||
float: right;
|
||||
padding: 5px 10px;
|
||||
line-height: 30px;
|
||||
padding: 0px 10px;
|
||||
border-bottom-left-radius: @border-radius-base;
|
||||
|
||||
text-align: right;
|
||||
|
||||
&-title {
|
||||
font-weight: bold;
|
||||
|
@ -245,6 +247,10 @@ disc-field-chooser {
|
|||
}
|
||||
}
|
||||
|
||||
.sidebar-item.active .sidebar-item-title {
|
||||
background-color: @sidebar-active-bg;
|
||||
color: @sidebar-active-color;
|
||||
}
|
||||
.sidebar-item-title {
|
||||
position: relative;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Load the kibana app dependencies.
|
||||
import ngMock from 'ngMock';
|
||||
import ngMock from 'ng_mock';
|
||||
import expect from 'expect.js';
|
||||
import 'plugins/kibana/doc/index';
|
||||
import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern';
|
||||
|
|
|
@ -28,36 +28,14 @@ routes
|
|||
|
||||
chrome
|
||||
.setBrand({
|
||||
'logo': 'url(' + kibanaLogoUrl + ') left no-repeat',
|
||||
'smallLogo': 'url(' + kibanaLogoUrl + ') left no-repeat'
|
||||
'logo': 'url(' + kibanaLogoUrl + ') 6px 10px / 140px 50px no-repeat #e8488b',
|
||||
'smallLogo': 'url(' + kibanaLogoUrl + ') 6px 10px / 140px 50px no-repeat #e8488b'
|
||||
})
|
||||
.setNavBackground('#222222')
|
||||
.setTabDefaults({
|
||||
resetWhenActive: true,
|
||||
lastUrlStore: window.sessionStore,
|
||||
lastUrlStore: window.sessionStorage,
|
||||
activeIndicatorColor: '#656a76'
|
||||
})
|
||||
.setTabs([
|
||||
{
|
||||
id: 'discover',
|
||||
title: 'Discover'
|
||||
},
|
||||
{
|
||||
id: 'visualize',
|
||||
title: 'Visualize',
|
||||
activeIndicatorColor: function () {
|
||||
return (String(this.lastUrl).indexOf('/visualize/step/') === 0) ? 'white' : '#656a76';
|
||||
}
|
||||
},
|
||||
{
|
||||
id: 'dashboard',
|
||||
title: 'Dashboard'
|
||||
},
|
||||
{
|
||||
id: 'settings',
|
||||
title: 'Settings'
|
||||
}
|
||||
])
|
||||
.setRootController('kibana', function ($scope, $rootScope, courier, config) {
|
||||
function setDefaultTimezone() {
|
||||
moment.tz.setDefault(config.get('dateFormat:tz'));
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<div class="app-container">
|
||||
<nav class="navbar navbar-default navbar-static-top subnav" data-test-subj="settingsNav">
|
||||
<div class="container-fluid">
|
||||
<bread-crumbs></bread-crumbs>
|
||||
<ul class="nav navbar-nav">
|
||||
<li ng-repeat="section in sections" ng-class="section.class">
|
||||
<a class="navbar-link" kbn-href="{{section.url}}" data-test-subj="{{section.name}}">{{section.display}}</a>
|
||||
|
|
|
@ -9,6 +9,7 @@ import 'ui/filters/start_from';
|
|||
import 'ui/field_editor';
|
||||
import 'plugins/kibana/settings/sections/indices/_indexed_fields';
|
||||
import 'plugins/kibana/settings/sections/indices/_scripted_fields';
|
||||
import 'ui/directives/bread_crumbs';
|
||||
import registry from 'ui/registry/settings_sections';
|
||||
import uiRoutes from 'ui/routes';
|
||||
import uiModules from 'ui/modules';
|
||||
|
@ -20,7 +21,7 @@ uiRoutes
|
|||
redirectTo: '/settings/indices'
|
||||
});
|
||||
|
||||
require('ui/index_patterns/routeSetup/loadDefault')({
|
||||
require('ui/index_patterns/route_setup/load_default')({
|
||||
notRequiredRe: /^\/settings\//,
|
||||
whenMissingRedirectTo: '/settings/indices'
|
||||
});
|
||||
|
|
|
@ -11,6 +11,10 @@ kbn-settings-objects-view {
|
|||
display: block;
|
||||
}
|
||||
|
||||
nav.navbar {
|
||||
height: 70px;
|
||||
}
|
||||
|
||||
.settings-nav {
|
||||
text-transform: capitalize;
|
||||
}
|
||||
|
@ -19,6 +23,15 @@ li.kbn-settings-tab:first-letter {
|
|||
text-transform: capitalize;
|
||||
}
|
||||
|
||||
kbn-settings-app {
|
||||
div.app-container {
|
||||
div.container-fluid {
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
kbn-settings-objects {
|
||||
form {
|
||||
margin-bottom: @line-height-computed;
|
||||
|
@ -93,6 +106,8 @@ kbn-settings-objects-view {
|
|||
}
|
||||
|
||||
.advanced-settings {
|
||||
overflow-x: scroll;
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
import angular from 'angular';
|
||||
import _ from 'lodash';
|
||||
import expect from 'expect.js';
|
||||
import ngMock from 'ngMock';
|
||||
import ngMock from 'ng_mock';
|
||||
import $ from 'jquery';
|
||||
import 'plugins/kibana/visualize/editor/agg';
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
aria-label="{{ editorOpen ? 'Close Editor' : 'Open Editor' }}"
|
||||
ng-click="editorOpen = !editorOpen"
|
||||
type="button"
|
||||
class="btn btn-default btn-xs vis-editor-agg-header-toggle">
|
||||
class="btn btn-primary btn-xs vis-editor-agg-header-toggle">
|
||||
<i aria-hidden="true" ng-class="{ 'fa-caret-down': editorOpen, 'fa-caret-right': !editorOpen }" class="fa"></i>
|
||||
</button>
|
||||
|
||||
|
@ -36,7 +36,7 @@
|
|||
tooltip="Increase Priority"
|
||||
tooltip-append-to-body="true"
|
||||
type="button"
|
||||
class="btn btn-xs btn-default">
|
||||
class="btn btn-xs btn-primary">
|
||||
<i aria-hidden="true" class="fa fa-caret-up"></i>
|
||||
</button>
|
||||
|
||||
|
@ -49,7 +49,7 @@
|
|||
tooltip="Decrease Priority"
|
||||
tooltip-append-to-body="true"
|
||||
type="button"
|
||||
class="btn btn-xs btn-default">
|
||||
class="btn btn-xs btn-primary">
|
||||
<i aria-hidden="true" class="fa fa-caret-down"></i>
|
||||
</button>
|
||||
|
||||
|
|
|
@ -18,14 +18,14 @@
|
|||
class="vis-editor-agg-wide-btn">
|
||||
|
||||
<div ng-if="!add.form">
|
||||
<div class="vis-editor-agg-wide-btn-add" ng-if="groupName !== 'buckets' || !stats.count">
|
||||
<i aria-hidden="true" class="fa fa-plus"></i> Add {{ groupName }}
|
||||
<div class="btn btn-sm btn-primary" ng-if="groupName !== 'buckets' || !stats.count">
|
||||
Add {{ groupName }}
|
||||
</div>
|
||||
<div class="vis-editor-agg-wide-btn-add" ng-if="groupName === 'buckets' && stats.count > 0">
|
||||
<i aria-hidden="true" class="fa fa-code-fork"></i> Add sub-{{ groupName }}
|
||||
<div class="btn btn-sm btn-primary" ng-if="groupName === 'buckets' && stats.count > 0">
|
||||
Add sub-{{ groupName }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="vis-editor-agg-wide-btn-add" ng-if="add.form">
|
||||
<div class="btn btn-sm btn-primary" ng-if="add.form">
|
||||
Cancel
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import VisAggConfigProvider from 'ui/Vis/AggConfig';
|
||||
import VisAggConfigProvider from 'ui/vis/agg_config';
|
||||
import uiModules from 'ui/modules';
|
||||
import aggAddTemplate from 'plugins/kibana/visualize/editor/agg_add.html';
|
||||
|
||||
|
|
|
@ -6,13 +6,6 @@
|
|||
<div class="vis-editor-agg-group" ng-class="groupName">
|
||||
<!-- wrapper needed for nesting-indicator -->
|
||||
<div ng-repeat="agg in group" class="vis-editor-agg-wrapper">
|
||||
<nesting-indicator
|
||||
ng-if="groupName === 'buckets'"
|
||||
item="agg"
|
||||
index="$index"
|
||||
list="group">
|
||||
</nesting-indicator>
|
||||
|
||||
<!-- agg.html - controls for aggregation -->
|
||||
<ng-form vis-editor-agg name="aggForm" class="vis-editor-agg"></ng-form>
|
||||
</div>
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue