Skip to content

Commit

Permalink
Merge branch 'master' into alerting/disable-actions-plugin-ESO-tmp-key
Browse files Browse the repository at this point in the history
  • Loading branch information
elasticmachine authored Feb 12, 2020
2 parents a23511b + b7ba72b commit a12046a
Show file tree
Hide file tree
Showing 44 changed files with 1,107 additions and 522 deletions.
Binary file removed docs/images/controls/controls_in_dashboard.png
Binary file not shown.
Binary file added docs/images/dashboard-controls.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/markdown-example.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/markdown_example_1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/markdown_example_2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/markdown_example_3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/markdown_example_4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
42 changes: 29 additions & 13 deletions docs/limitations.asciidoc
Original file line number Diff line number Diff line change
@@ -1,22 +1,38 @@
[chapter]
[[limitations]]
= Limitations

[partintro]
--
{kib} currently has the following limitations.
Following are the known limitations in {kib}.

* <<nested-objects>>
* <<export-data>>
* <<graph-limitations,Graph analytics>>
[float]
=== Exporting data

These {stack} features also have limitations that affect {kib}:
Exporting a data table or saved search from a dashboard or visualization report
has known limitations. The PDF report only includes the data visible on the screen.

* {ref}/watcher-limitations.html[Alerting]
* {ml-docs}/ml-limitations.html[Machine learning]
* {ref}/security-limitations.html[Security]
[float]
=== Nested objects

Kibana cannot perform aggregations across fields that contain nested objects.
It also cannot search on nested objects when Lucene Query Syntax is used in
the query bar.

[IMPORTANT]
==============================================
Using `include_in_parent` or `copy_to` as a workaround is not supported and may stop functioning in future releases.
==============================================

--
[float]
=== Graph

include::limitations/nested-objects.asciidoc[]
Graph has limited support for multiple indices.
Go to <<graph-limitations, Graph limitations>> for details.

include::limitations/export-data.asciidoc[]
[float]
=== Other limitations

These {stack} features have limitations that affect {kib}:

* {ref}/watcher-limitations.html[Alerting]
* {ml-docs}/ml-limitations.html[Machine learning]
* {ref}/security-limitations.html[Security]
5 changes: 0 additions & 5 deletions docs/limitations/export-data.asciidoc

This file was deleted.

11 changes: 0 additions & 11 deletions docs/limitations/nested-objects.asciidoc

This file was deleted.

4 changes: 2 additions & 2 deletions docs/user/visualize.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ data sets.

* *<<for-dashboard,Dashboard tools>>*
[horizontal]
<<for-dashboard,Controls>>:: Provides the ability to add interactive inputs to a Dashboard.
Controls:: Adds interactive inputs to a Dashboard.

<<for-dashboard,Markdown widget>>:: Display free-form information or instructions.
Markdown widget:: Display free-form information or instructions.

* *For developers*
[horizontal]
Expand Down
116 changes: 25 additions & 91 deletions docs/visualize/for-dashboard.asciidoc
Original file line number Diff line number Diff line change
@@ -1,117 +1,51 @@
[[for-dashboard]]
== Markdown and controls

[float]
[[markdown-widget]]
=== Markdown widget

The Markdown widget is a text entry field that accepts GitHub-flavored Markdown text. Kibana renders the text you enter
in this field and displays the results on the dashboard. You can click the *Help* link to go to the
https://help.github.com/articles/github-flavored-markdown/[help page] for GitHub flavored Markdown. From the widget
you can:

* Click *Apply* to display the rendered text in the Preview panel
* Click *Discard* to revert to a previously saved version
== Dashboard tools

Visualize comes with controls and Markdown tools that you can add to dashboards for an interactive experience.

[float]
[[controls]]
=== Controls widget
=== Controls
experimental[]

The Controls widget enables you to add interactive inputs
to a dashboard. You can create two types of inputs:
The controls tool enables you to add interactive inputs
on a dashboard.

* Dropdown menu
* Radio slider
You can add two types of interactive inputs:

[role="screenshot"]
image::images/controls/controls_in_dashboard.png[]
* *Options list* - Filters content based on one or more specified options. The dropdown menu is dynamically populated with the results of a terms aggregation. For example, use the options list on the sample flight dashboard when you want to filter the data by origin city and destination city.

[float]
[[add-input-controls]]
=== Add input controls

To start a *Controls* visualization, open the Visualization application
and click the *+* button. Scroll to the *Others* section and
select *Controls*.

In the visualization builder, choose the type of control to add to
your visualization.

[float]
==== Dropdown menu

A dropdown menu allows users to filter content by selecting
one or more options from a list. The dropdown menu is dynamically populated
with the results of a terms aggregation.
* *Range slider* - Filters data within a specified range of numbers. The minimum and maximum values are dynamically populated with the results of a min and max aggregation. For example, use the range slider when you want to filter the sample flight dashboard by a specific average ticket price.

[role="screenshot"]
image::images/controls/dropdown_control_editor.png[]

*Control Label*:: The label for the dropdown menu. By default, the
label is the field name.

*Index Pattern*:: The <<index-patterns,index pattern>> that contains
the data set to visualize.

*Field*:: The field used to populate the list of options
and filter on when users interact with the input.
The list of available fields is derived from the specified
index pattern.

*Parent control*:: The control for chaining dropdown menus so that the
selection in the first menu
filters the terms in the second menu. Only available when
creating multiple dropdown menus.

*Multiselect*:: When enabled, the dropdown menu allows users to select multiple options.

*Size*:: The number of options to include in the list.
image::images/dashboard-controls.png[]

[float]
==== Range slider
[[markdown-widget]]
=== Markdown

A range sliders allow users to filter content within a range of numbers.
The range slider minimum and maximum values are dynamically populated with
the results of a min and max aggregation.
The Markdown tool is a text entry field that accepts GitHub-flavored Markdown text. When you enter the text, the tool populates the results on the dashboard.

[role="screenshot"]
image::images/controls/range_slider_editor.png[]
Markdown is helpful when you want to include important information, instructions, and images on your dashboard.

*Control Label*:: The label for the range slider. By default, the
label is the field name.
For information about GitHub-flavored Markdown text, click *Help*.

*Index Pattern*:: The <<index-patterns,index pattern>> that contains
the data set to visualize.
For example, when you enter:

*Field*:: The field used to populate the range slider
and filter on when users interact with the input.
The list of available fields is derived from the
specified index pattern.

*Step Size*:: The increment/decrement size of the slider.
[role="screenshot"]
image::images/markdown_example_1.png[]

*Decimal Places*:: The number of decimal places.
The following instructions are displayed:

[float]
[[global-options]]
=== Global options
[role="screenshot"]
image::images/markdown_example_2.png[]

Open the *Options* tab to configure settings that apply to all input
controls in a Controls visualization.
Or when you enter:

[role="screenshot"]
image::images/controls/controls_options.png[]

*Update Kibana filters on each change*:: When enabled, all input interactions
immediately create filters that cause the dashboard to refresh. When disabled,
Kibana filters are only created
when the user clicks *Apply changes* image:images/apply-changes-button.png[].
image::images/markdown_example_3.png[]

*Use time filter*:: When enabled, the aggregations used to generate
the dropdown options list and range minimum and maximum are bound
to <<set-time-filter,Kibana's global time range>>.
The following image is displayed:

*Pin filters to global state*:: When enabled, all filters created by
interacting with the inputs are automatically pinned.
[role="screenshot"]
image::images/markdown_example_4.png[]
2 changes: 2 additions & 0 deletions docs/visualize/most-frequent.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ The most frequently used visualizations include:
* Metric, goal, and gauge
* Tag cloud

[[metric-chart]]

[float]
[[frequently-used-viz-aggregation]]
=== Supported aggregations
Expand Down
147 changes: 147 additions & 0 deletions x-pack/legacy/plugins/alerting/server/alerts_client.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2263,6 +2263,153 @@ describe('update()', () => {
`);
});

it(`doesn't call the createAPIKey function when alert is disabled`, async () => {
encryptedSavedObjects.getDecryptedAsInternalUser.mockResolvedValue({
...existingDecryptedAlert,
attributes: {
...existingDecryptedAlert.attributes,
enabled: false,
},
});
savedObjectsClient.bulkGet.mockResolvedValueOnce({
saved_objects: [
{
id: '1',
type: 'action',
attributes: {
actionTypeId: 'test',
},
references: [],
},
],
});
savedObjectsClient.update.mockResolvedValueOnce({
id: '1',
type: 'alert',
attributes: {
enabled: false,
schedule: { interval: '10s' },
params: {
bar: true,
},
createdAt: new Date().toISOString(),
actions: [
{
group: 'default',
actionRef: 'action_0',
actionTypeId: 'test',
params: {
foo: true,
},
},
],
scheduledTaskId: 'task-123',
apiKey: null,
},
updated_at: new Date().toISOString(),
references: [
{
name: 'action_0',
type: 'action',
id: '1',
},
],
});
const result = await alertsClient.update({
id: '1',
data: {
schedule: { interval: '10s' },
name: 'abc',
tags: ['foo'],
params: {
bar: true,
},
actions: [
{
group: 'default',
id: '1',
params: {
foo: true,
},
},
],
},
});
expect(alertsClientParams.createAPIKey).not.toHaveBeenCalled();
expect(result).toMatchInlineSnapshot(`
Object {
"actions": Array [
Object {
"actionTypeId": "test",
"group": "default",
"id": "1",
"params": Object {
"foo": true,
},
},
],
"apiKey": null,
"createdAt": 2019-02-12T21:01:22.479Z,
"enabled": false,
"id": "1",
"params": Object {
"bar": true,
},
"schedule": Object {
"interval": "10s",
},
"scheduledTaskId": "task-123",
"updatedAt": 2019-02-12T21:01:22.479Z,
}
`);
expect(savedObjectsClient.update).toHaveBeenCalledTimes(1);
expect(savedObjectsClient.update.mock.calls[0]).toHaveLength(4);
expect(savedObjectsClient.update.mock.calls[0][0]).toEqual('alert');
expect(savedObjectsClient.update.mock.calls[0][1]).toEqual('1');
expect(savedObjectsClient.update.mock.calls[0][2]).toMatchInlineSnapshot(`
Object {
"actions": Array [
Object {
"actionRef": "action_0",
"actionTypeId": "test",
"group": "default",
"params": Object {
"foo": true,
},
},
],
"alertTypeId": "123",
"apiKey": null,
"apiKeyOwner": null,
"enabled": false,
"name": "abc",
"params": Object {
"bar": true,
},
"schedule": Object {
"interval": "10s",
},
"scheduledTaskId": "task-123",
"tags": Array [
"foo",
],
"updatedBy": "elastic",
}
`);
expect(savedObjectsClient.update.mock.calls[0][3]).toMatchInlineSnapshot(`
Object {
"references": Array [
Object {
"id": "1",
"name": "action_0",
"type": "action",
},
],
"version": "123",
}
`);
});

it('should validate params', async () => {
alertTypeRegistry.get.mockReturnValueOnce({
id: '123',
Expand Down
3 changes: 2 additions & 1 deletion x-pack/legacy/plugins/alerting/server/alerts_client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,8 @@ export class AlertsClient {

const { actions, references } = await this.denormalizeActions(data.actions);
const username = await this.getUserName();
const apiKeyAttributes = this.apiKeyAsAlertAttributes(await this.createAPIKey(), username);
const createdAPIKey = attributes.enabled ? await this.createAPIKey() : null;
const apiKeyAttributes = this.apiKeyAsAlertAttributes(createdAPIKey, username);

const updatedObject = await this.savedObjectsClient.update<RawAlert>(
'alert',
Expand Down
Loading

0 comments on commit a12046a

Please sign in to comment.