diff --git a/assets/styles/layouts/_article.scss b/assets/styles/layouts/_article.scss
index c9ca666a0..1c8ef4a49 100644
--- a/assets/styles/layouts/_article.scss
+++ b/assets/styles/layouts/_article.scss
@@ -18,7 +18,8 @@
}
}
h2,h3,h4,h5,h6 {
- & + .highlight pre { margin-top: .5rem; }
+ & + .highlight pre { margin-top: .5rem }
+ & + pre { margin-top: .5rem }
& + .code-tabs-wrapper { margin-top: 0; }
}
h1 {
diff --git a/assets/styles/layouts/_inline-icons.scss b/assets/styles/layouts/_inline-icons.scss
index 0609c0c24..b654d14bd 100644
--- a/assets/styles/layouts/_inline-icons.scss
+++ b/assets/styles/layouts/_inline-icons.scss
@@ -26,22 +26,22 @@
&.ui-toggle {
display: inline-block;
position: relative;
- width: 34px;
- height: 22px;
- background: #1C1C21;
- border: 2px solid #383846;
+ width: 28px;
+ height: 16px;
+ background: $b-pool;
border-radius: .7rem;
- vertical-align: text-bottom;
+ vertical-align: text-top;
+ margin-top: 2px;
.circle {
display: inline-block;
position: absolute;
border-radius: 50%;
- height: 12px;
- width: 12px;
- background: #22ADF6;
- top: 3px;
- right: 3px;
+ height: 8px;
+ width: 8px;
+ background: $g20-white;
+ top: 4px;
+ right: 4px;
}
}
}
diff --git a/assets/styles/themes/_theme-dark.scss b/assets/styles/themes/_theme-dark.scss
index 26efd67cc..4ca1c16ad 100644
--- a/assets/styles/themes/_theme-dark.scss
+++ b/assets/styles/themes/_theme-dark.scss
@@ -86,7 +86,7 @@ $article-note-table-row-alt: #3B2862;
$article-note-table-scrollbar: $np-deepnight;
$article-note-shadow: $np-deepnight;
$article-note-code: $cp-comet;
-$article-note-code-bg: $wp-telopea;
+$article-note-code-bg: $wp-jaguar;
$article-note-code-accent1: #567375;
$article-note-code-accent2: $b-pool;
$article-note-code-accent3: $gr-viridian;
diff --git a/assets/styles/tools/_color-palette.scss b/assets/styles/tools/_color-palette.scss
index 7004a1aa2..146282cfa 100644
--- a/assets/styles/tools/_color-palette.scss
+++ b/assets/styles/tools/_color-palette.scss
@@ -24,6 +24,7 @@ $g19-ghost: #FAFAFC;
$g20-white: #FFFFFF; // Brand color
// Warm Purples - Magentas
+$wp-jaguar: #1d0135;
$wp-telopea: #23043E;
$wp-violentdark: #2d0749;
$wp-violet: #32094E;
diff --git a/assets/styles/tools/_icomoon.scss b/assets/styles/tools/_icomoon.scss
index dfd7c1f91..32f4e000f 100644
--- a/assets/styles/tools/_icomoon.scss
+++ b/assets/styles/tools/_icomoon.scss
@@ -1,10 +1,10 @@
@font-face {
font-family: 'icomoon';
- src: url('fonts/icomoon.eot?e8u66e');
- src: url('fonts/icomoon.eot?e8u66e#iefix') format('embedded-opentype'),
- url('fonts/icomoon.ttf?e8u66e') format('truetype'),
- url('fonts/icomoon.woff?e8u66e') format('woff'),
- url('fonts/icomoon.svg?e8u66e#icomoon') format('svg');
+ src: url('fonts/icomoon.eot?9r9zke');
+ src: url('fonts/icomoon.eot?9r9zke#iefix') format('embedded-opentype'),
+ url('fonts/icomoon.ttf?9r9zke') format('truetype'),
+ url('fonts/icomoon.woff?9r9zke') format('woff'),
+ url('fonts/icomoon.svg?9r9zke#icomoon') format('svg');
font-weight: normal;
font-style: normal;
}
@@ -24,9 +24,24 @@
-moz-osx-font-smoothing: grayscale;
}
+.icon-ui-disks-nav:before {
+ content: "\e93c";
+}
+.icon-ui-wrench-nav:before {
+ content: "\e93d";
+}
+.icon-ui-eye-closed:before {
+ content: "\e956";
+}
+.icon-ui-eye-open:before {
+ content: "\e957";
+}
.icon-ui-chat:before {
content: "\e93a";
}
+.icon-ui-bell:before {
+ content: "\e93b";
+}
.icon-ui-cloud:before {
content: "\e93f";
}
diff --git a/content/v2.0/cloud/account-management/offboarding.md b/content/v2.0/cloud/account-management/offboarding.md
index 34b3f6bc9..f2b9d6fb2 100644
--- a/content/v2.0/cloud/account-management/offboarding.md
+++ b/content/v2.0/cloud/account-management/offboarding.md
@@ -36,9 +36,9 @@ For details, see [Export a dashboard](v2.0/visualize-data/dashboards/export-dash
**To save a Telegraf configuration:**
-1. Click in the **Organizations** icon in the navigation bar.
+1. Click in the **Settings** icon in the navigation bar.
- {{< nav-icon "orgs" >}}
+ {{< nav-icon "settings" >}}
2. Select the **Telegraf** tab. A list of existing Telegraf configurations appears.
3. Click on the name of a Telegraf configuration.
diff --git a/content/v2.0/monitor-alert/_index.md b/content/v2.0/monitor-alert/_index.md
new file mode 100644
index 000000000..00d2bf8bf
--- /dev/null
+++ b/content/v2.0/monitor-alert/_index.md
@@ -0,0 +1,39 @@
+---
+title: Monitor data and send alerts
+seotitle: Monitor data and send alerts
+description: >
+ Monitor your time series data and send alerts by creating checks, notification
+ rules, and notification endpoints.
+menu:
+ v2_0:
+ name: Monitor & alert
+weight: 6
+v2.0/tags: [monitor, alert, checks, notification, endpoints]
+cloud_all: true
+---
+
+Monitor your time series data and send alerts by creating checks, notification
+rules, and notification endpoints.
+
+## The monitoring workflow
+1. InfluxDB uses a [check](/v2.0/reference/glossary/#check) to query data and
+ assigns a status or `_level` based on specific conditions.
+2. InfluxDB stores the output the check in the `statuses` measurement in the `_monitoring` system bucket.
+3. [Notification rules](/v2.0/reference/glossary/#notification-rule) check data in the `statuses`
+ measurement and, based conditions set in the notification rule, send a message
+ to a [notification endpoint](/v2.0/reference/glossary/#notification-endpoint).
+4. InfluxDB stores notifications in the `notifications` measurement in the `_monitoring` system bucket.
+
+## Monitor your data
+To get started, do the following:
+
+1. [Create checks](/v2.0/monitor-alert/checks/create/) to monitor data and assign a status.
+2. [Add notification endpoints](/v2.0/monitor-alert/notification-endpoints/create/)
+ to send notifications to third parties.
+3. [Create notification rules](/v2.0/monitor-alert/notification-rules/create) to check
+ statuses and send notifications to your notifications endpoints.
+
+
+## Manage your monitoring and alerting pipeline
+
+{{< children >}}
diff --git a/content/v2.0/monitor-alert/checks/_index.md b/content/v2.0/monitor-alert/checks/_index.md
new file mode 100644
index 000000000..490bb8645
--- /dev/null
+++ b/content/v2.0/monitor-alert/checks/_index.md
@@ -0,0 +1,20 @@
+---
+title: Manage checks
+seotitle: Manage monitoring checks in InfluxDB
+description: >
+ Checks in InfluxDB query data and apply a status or level to each data point based on specified conditions.
+menu:
+ v2_0:
+ parent: Monitor & alert
+weight: 101
+v2.0/tags: [monitor, checks, notifications, alert]
+related:
+ - /v2.0/monitor-alert/notification-rules/
+ - /v2.0/monitor-alert/notification-endpoints/
+cloud_all: true
+---
+
+Checks in InfluxDB query data and apply a status or level to each data point based on specified conditions.
+Learn how to create and manage checks:
+
+{{< children >}}
diff --git a/content/v2.0/monitor-alert/checks/create.md b/content/v2.0/monitor-alert/checks/create.md
new file mode 100644
index 000000000..b075a4f83
--- /dev/null
+++ b/content/v2.0/monitor-alert/checks/create.md
@@ -0,0 +1,149 @@
+---
+title: Create checks
+seotitle: Create monitoring checks in InfluxDB
+description: >
+ Create a check in the InfluxDB UI.
+menu:
+ v2_0:
+ parent: Manage checks
+weight: 201
+related:
+ - /v2.0/monitor-alert/notification-rules/
+ - /v2.0/monitor-alert/notification-endpoints/
+cloud_all: true
+---
+
+Create a check in the InfluxDB user interface (UI).
+A check consists of two parts – a query and check configuration.
+
+##### Check query
+- Specifies the dataset to monitor.
+- Requires a bucket, measurement, field, and an aggregate function.
+
+ {{% note %}}The aggregate function aggregates data points between the specified check intervals
+ and returns a single value for the check to process.
+ {{% /note %}}
+- May include tags to narrow results.
+
+##### Check configuration
+- Defines check properties, including the check interval and status message.
+- Evaluates specified conditions and applies a status (if applicable) to each data point:
+ - `crit`
+ - `warn`
+ - `info`
+ - `note`
+- Stores status in the `_level` column.
+
+## Create a check in the InfluxDB UI
+1. Click **Monitoring & Alerting** in the sidebar.
+
+ {{< nav-icon "alerts" >}}
+
+2. In the top right corner of the **Checks** column, click **{{< icon "plus" >}} Create**.
+
+3. Click **Name this check** in the top left corner and provide a unique name for the check.
+
+### Configure the query
+1. In the **Query view**, select the bucket, measurement, field and tag sets to query.
+2. In the **Aggregate functions** column, select an interval from the interval drop-down list
+ (for example, "Every 5 minutes") and an aggregate function from the list of functions.
+3. Click **Submit** to run the query and preview the results.
+ To see the raw query results, click the the **{{< icon "toggle" >}} View Raw Data** toggle.
+
+### Configure the check
+1. Click **2. Check** near the top of the window to display the **Check view**.
+2. In the **Properties** column, configure the following:
+
+ ##### Schedule Every
+ Select the interval to run the check (for example, "Every 5 minutes").
+ This interval matches the aggregate function interval for the check query.
+ _Changing the interval here will update the aggregate function interval._
+
+ ##### Offset
+ Delay the execution of a task to account for any late data.
+ Offset queries do not change the queried time range.
+
+ {{% note %}}Your offset must be shorter than your [check interval](#schedule-every).
+ {{% /note %}}
+
+ ##### Tags
+ Add custom tags to the query output.
+ Each custom tag appends a new column to each row in the query output.
+ The column label is the tag key and the column value is the tag value.
+
+ Use custom tags to associate additional metadata with the check.
+ Common metadata tags across different checks lets you easily group and organize checks.
+ You can also use custom tags in [notification rules](/v2.0/monitor-alert/notification-rules/create/).
+
+3. In the **Status Message Template** column, enter the status message template for the check.
+ Use [Flux string interpolation](/v2.0/reference/flux/language/string-interpolation/)
+ to populate the message with data from the query.
+
+ {{% note %}}
+#### Flux only interpolates string values
+Flux currently interpolates only string values.
+Use the [string() function](/v2.0/reference/flux/functions/built-in/transformations/type-conversions/string/)
+to convert non-string values to strings.
+
+```js
+count = 12
+"I currently have ${string(v: count)} cats."
+```
+ {{% /note %}}
+
+ Check data is represented as an object, `r`.
+ Access specific column values using dot notation: `r.columnName`.
+
+ Use data from the following columns:
+
+ - columns included in the query output
+ - [custom tags](#tags) added to the query output
+ - `_check_id`
+ - `_check_name`
+ - `_level`
+ - `_source_measurement`
+ - `_type`
+
+ ###### Example status message template
+ ```
+ From ${r._check_name}:
+ ${r._field} is ${r._level}.
+ Its value is ${string(v: r._value)}.
+ ```
+
+ When a check generates a status, it stores the message in the `_message` column.
+
+4. In the **Conditions** column, define the logic that assigns a status or level to data.
+ Select the type of check to configure:
+
+ ##### Threshold
+ A threshold check assigns a status based on a value being above, below,
+ inside, or outside of defined thresholds.
+ [Configure a threshold check](#configure-a-threshold-check).
+
+ ##### Deadman
+ A deadman check assigns a status to data when a series or group has not
+ reported in a specified amount of time.
+ [Configure a deadman check](#configure-a-deadman-check).
+
+ ##### Configure a threshold check
+ 1. For each status you want to configure, click the status name (CRIT, WARN, INFO, or OK).
+ 2. From the **When value** drop-down list, select a threshold: is above, is below,
+ is inside of, is outside of.
+ 3. Enter a value or values for the threshold.
+ You can also use the threshold sliders in the data visualization to define threshold values.
+
+ ##### Configure a deadman check
+ 1. In the **for** field, enter a duration for the deadman check.
+ For example, `5m`, `1h`, or `2h30m`.
+ 2. Use the **set status to** drop-down list to select a status to set on a dead series.
+ 3. In the **And stop checking after** field, enter the time to stop monitoring the series.
+ For example, `30m`, `2h`, `3h15m`.
+
+5. Click the green **{{< icon "check" >}}** in the top right corner to save the check.
+
+## Clone a check
+Create a new check by cloning an existing check.
+
+1. In the **Checks** column, hover over the check you want to clone.
+2. Click the **{{< icon "clone" >}}** icon, then **Clone**.
diff --git a/content/v2.0/monitor-alert/checks/delete.md b/content/v2.0/monitor-alert/checks/delete.md
new file mode 100644
index 000000000..3d42b1bac
--- /dev/null
+++ b/content/v2.0/monitor-alert/checks/delete.md
@@ -0,0 +1,35 @@
+---
+title: Delete checks
+seotitle: Delete monitoring checks in InfluxDB
+description: >
+ Delete checks in the InfluxDB UI.
+menu:
+ v2_0:
+ parent: Manage checks
+weight: 204
+related:
+ - /v2.0/monitor-alert/notification-rules/
+ - /v2.0/monitor-alert/notification-endpoints/
+cloud_all: true
+---
+
+If you no longer need a check, use the InfluxDB user interface (UI) to delete it.
+
+{{% warn %}}
+Deleting a check cannot be undone.
+{{% /warn %}}
+
+1. Click **Monitoring & Alerting** in the sidebar.
+
+ {{< nav-icon "alerts" >}}
+
+2. In the **Checks** column, hover over the check you want to delete, click the
+ **{{< icon "delete" >}}** icon, then **Delete**.
+
+After a check is deleted, all statuses generated by the check remain in the `_monitoring`
+bucket until the retention period for the bucket expires.
+
+{{% note %}}
+You can also [disable a check](/v2.0/monitor-alert/checks/update/#enable-or-disable-a-check)
+without having to delete it.
+{{% /note %}}
diff --git a/content/v2.0/monitor-alert/checks/update.md b/content/v2.0/monitor-alert/checks/update.md
new file mode 100644
index 000000000..935509b05
--- /dev/null
+++ b/content/v2.0/monitor-alert/checks/update.md
@@ -0,0 +1,63 @@
+---
+title: Update checks
+seotitle: Update monitoring checks in InfluxDB
+description: >
+ Update, rename, enable or disable checks in the InfluxDB UI.
+menu:
+ v2_0:
+ parent: Manage checks
+weight: 203
+related:
+ - /v2.0/monitor-alert/notification-rules/
+ - /v2.0/monitor-alert/notification-endpoints/
+cloud_all: true
+---
+
+Update checks in the InfluxDB user interface (UI).
+Common updates include:
+
+- [Update check queries and logic](#update-check-queries-and-logic)
+- [Enable or disable a check](#enable-or-disable-a-check)
+- [Rename a check](#rename-a-check)
+- [Add or update a check description](#add-or-update-a-check-description)
+- [Add a label to a check](#add-a-label-to-a-check)
+
+To update checks, click **Monitoring & Alerting** in the InfluxDB UI sidebar.
+
+{{< nav-icon "alerts" >}}
+
+
+## Update check queries and logic
+1. In the **Checks** column, click the name of the check you want to update.
+ The check builder appears.
+2. To edit the check query, click **1. Query** at the top of the check builder window.
+3. To edit the check logic, click **2. Check** at the top of the check builder window.
+
+_For details about using the check builder, see [Create checks](/v2.0/monitor-alert/checks/create/)._
+
+## Enable or disable a check
+In the **Checks** column, click the {{< icon "toggle" >}} toggle next to a check
+to enable or disable it.
+
+## Rename a check
+1. In the **Checks** column, hover over the name of the check you want to update.
+2. Click the **{{< icon "edit" >}}** icon that appears next to the check name.
+2. Enter a new name and click out of the name field or press enter to save.
+
+_You can also rename a check in the [check builder](#update-check-queries-and-logic)._
+
+## Add or update a check description
+1. In the **Checks** column, hover over the check description you want to update.
+2. Click the **{{< icon "edit" >}}** icon that appears next to the description.
+2. Enter a new description and click out of the name field or press enter to save.
+
+## Add a label to a check
+1. In the **Checks** column, click **Add a label** next to the check you want to add a label to.
+ The **Add Labels** box opens.
+2. To add an existing label, select the label from the list.
+3. To create and add a new label:
+ - In the search field, enter the name of the new label. The **Create Label** box opens.
+ - In the **Description** field, enter an optional description for the label.
+ - Select a color for the label.
+ - Click **Create Label**.
+4. To remove a label, hover over the label under to a rule and click **{{< icon "x" >}}**.
diff --git a/content/v2.0/monitor-alert/checks/view.md b/content/v2.0/monitor-alert/checks/view.md
new file mode 100644
index 000000000..b27e7a202
--- /dev/null
+++ b/content/v2.0/monitor-alert/checks/view.md
@@ -0,0 +1,44 @@
+---
+title: View checks
+seotitle: View monitoring checks in InfluxDB
+description: >
+ View check details and statuses and notifications generated by checks in the InfluxDB UI.
+menu:
+ v2_0:
+ parent: Manage checks
+weight: 202
+related:
+ - /v2.0/monitor-alert/notification-rules/
+ - /v2.0/monitor-alert/notification-endpoints/
+cloud_all: true
+---
+
+View check details and statuses and notifications generated by checks in the InfluxDB user interface (UI).
+
+- [View a list of all checks](#view-a-list-of-all-checks)
+- [View check details](#view-check-details)
+- [View statuses generated by a check](#view-statuses-generated-by-a-check)
+- [View notifications triggered by a check](#view-notifications-triggered-by-a-check)
+
+To view checks, click **Monitoring & Alerting** in the InfluxDB UI sidebar.
+
+{{< nav-icon "alerts" >}}
+
+## View a list of all checks
+The **Checks** column on the Monitoring & Alerting landing page displays all existing checks.
+
+## View check details
+In the **Checks** column, click the name of the check you want to view.
+The check builder appears.
+Here you can view the check query and logic.
+
+## View statuses generated by a check
+1. In the **Checks** column, hover over the check, click the **{{< icon "view" >}}**
+ icon, then **View History**.
+ The Statuses History page displays statuses generated by the selected check.
+
+## View notifications triggered by a check
+1. In the **Checks** column, hover over the check, click the **{{< icon "view" >}}**
+ icon, then **View History**.
+2. In the top left corner, click **Notifications**.
+ The Notifications History page displays notifications initiated by the selected check.
diff --git a/content/v2.0/monitor-alert/notification-endpoints/_index.md b/content/v2.0/monitor-alert/notification-endpoints/_index.md
new file mode 100644
index 000000000..2362d0f5e
--- /dev/null
+++ b/content/v2.0/monitor-alert/notification-endpoints/_index.md
@@ -0,0 +1,21 @@
+---
+title: Manage notification endpoints
+list_title: Manage notification endpoints
+description: >
+ Create, read, update, and delete endpoints in the InfluxDB UI.
+v2.0/tags: [monitor, endpoints, notifications, alert]
+menu:
+ v2_0:
+ parent: Monitor & alert
+weight: 102
+related:
+ - /v2.0/monitor-alert/checks/
+ - /v2.0/monitor-alert/notification-rules/
+cloud_all: true
+---
+
+Notification endpoints store information to connect to a third party service.
+If you're using the Free plan, create a Slack endpoint.
+If you're using the Pay as You Go plan, create a connection to a HTTP, Slack, or PagerDuty endpoint.
+
+{{< children >}}
diff --git a/content/v2.0/monitor-alert/notification-endpoints/create.md b/content/v2.0/monitor-alert/notification-endpoints/create.md
new file mode 100644
index 000000000..3c485876e
--- /dev/null
+++ b/content/v2.0/monitor-alert/notification-endpoints/create.md
@@ -0,0 +1,44 @@
+---
+title: Create notification endpoints
+description: >
+ Create notification endpoints to send alerts on your time series data.
+menu:
+ v2_0:
+ name: Create endpoints
+ parent: Manage notification endpoints
+weight: 201
+related:
+ - /v2.0/monitor-alert/checks/
+ - /v2.0/monitor-alert/notification-rules/
+cloud_all: true
+---
+
+To send notifications about changes in your data, start by creating a notification endpoint to a third party service. After creating notification endpoints, [create notification rules](/v2.0/monitor-alert/notification-rules/create) to send alerts to third party services on [check statuses](/v2.0/monitor-alert/checks/create).
+
+## Create a notification endpoint in the UI
+
+1. Select the **Monitoring and Alerting** icon from the sidebar.
+
+ {{< nav-icon "alerts" >}}
+
+2. Next to **Notification Endpoints**, click **Create**.
+3. From the **Destination** drop-down list, select a destination endpoint to send notifications.
+ The following endpoints are available for InfluxDB 2.0 OSS, the InfluxDB Cloud 2.0 Free Plan,
+ and the InfluxDB Cloud 2.0 Pay As You Go (PAYG) Plan:
+
+ | Endpoint | OSS | Free Plan _(Cloud)_ | PAYG Plan _(Cloud)_ |
+ |:-------- |:--------:|:-------------------: |:----------------------------:|
+ | **Slack** | _Coming_ | **{{< icon "check" >}}** | **{{< icon "check" >}}** |
+ | **PagerDuty** | _Coming_ | | **{{< icon "check" >}}** |
+ | **HTTP** | _Coming_ | | **{{< icon "check" >}}** |
+
+4. In the **Name** and **Description** fields, enter a name and description for the endpoint.
+5. Enter enter information to connect to the endpoint:
+
+ - For HTTP, enter the **URL** to send the notification. Select the **auth method** to use: **None** for no authentication. To authenticate with a username and password, select **Basic** and then enter credentials in the **Username** and **Password** fields. To authenticate with a token, select **Bearer**, and then enter the authentication token in the **Token** field.
+
+ - For Slack, create an [Incoming WebHook](https://api.slack.com/incoming-webhooks#posting_with_webhooks) in Slack, and then enter your webHook URL in the **Slack Incoming WebHook URL** field.
+
+ - For PagerDuty, [create a new service](https://support.pagerduty.com/docs/services-and-integrations#section-create-a-new-service), [add an integration for your service](https://support.pagerduty.com/docs/services-and-integrations#section-add-integrations-to-an-existing-service), and then enter the PagerDuty integration key for your new service in the **Routing Key** field. By default, the PagerDuty client URL is https://events.pagerduty.com/v2/enqueue. For details, see [PagerDuty documentation](https://v2.developer.pagerduty.com/docs/send-an-event-events-api-v2).
+
+6. Click **Create Notification Endpoint**.
diff --git a/content/v2.0/monitor-alert/notification-endpoints/delete.md b/content/v2.0/monitor-alert/notification-endpoints/delete.md
new file mode 100644
index 000000000..88d2448b0
--- /dev/null
+++ b/content/v2.0/monitor-alert/notification-endpoints/delete.md
@@ -0,0 +1,25 @@
+---
+title: Delete notification endpoints
+description: >
+ Delete a notification endpoint in the InfluxDB UI.
+menu:
+ v2_0:
+ name: Delete endpoints
+ parent: Manage notification endpoints
+weight: 204
+related:
+ - /v2.0/monitor-alert/checks/
+ - /v2.0/monitor-alert/notification-rules/
+cloud_all: true
+---
+
+If notifications are no longer sent to an endpoint, complete the steps below to delete the endpoint, and then [update notification rules](/v2.0/monitor-alert/notification-rules/update) with a new notification endpoint as needed.
+
+## Delete a notification endpoint in the UI
+
+1. Select the **Monitoring and Alerting** icon from the sidebar.
+
+ {{< nav-icon "alerts" >}}
+
+2. Under **Notification Rules**, find the rule you want to delete.
+3. Click the delete icon, then click **Delete** to confirm.
diff --git a/content/v2.0/monitor-alert/notification-endpoints/update.md b/content/v2.0/monitor-alert/notification-endpoints/update.md
new file mode 100644
index 000000000..a49675a4d
--- /dev/null
+++ b/content/v2.0/monitor-alert/notification-endpoints/update.md
@@ -0,0 +1,68 @@
+---
+title: Update notification endpoints
+description: >
+ Update notification endpoints in the InfluxDB UI.
+menu:
+ v2_0:
+ name: Update endpoints
+ parent: Manage notification endpoints
+weight: 203
+related:
+ - /v2.0/monitor-alert/checks/
+ - /v2.0/monitor-alert/notification-rules/
+cloud_all: true
+---
+
+To update the notification endpoint details, complete the following procedures as needed.
+
+> **Note:** To update the notification endpoint selected for a notification rule, see [update notification rules](/v2.0/cloud/monitor-alert/update-notification-rules/).
+
+## Add a label to notification endpoint
+
+1. Select the **Monitoring and Alerting** icon from the sidebar.
+
+ {{< nav-icon "alerts" >}}
+
+2. Under **Notification Endpoints**, click **Add a label** next to the endpoint you want to add a label to. The **Add Labels** box opens.
+3. To add an existing label, select the label from the list.
+4. To create and add a new label:
+
+ - In the search field, enter the name of the new label. The **Create Label** box opens.
+ - In the **Description** field, enter an optional description for the label.
+ - Select a color for the label.
+ - Click **Create Label**.
+
+5. To remove a label, hover over the label under an endpoint and click X.
+
+
+## Disable notification endpoint
+
+1. Select the **Monitoring and Alerting** icon from the sidebar.
+
+
+ {{< nav-icon "alerts" >}}
+
+
+2. Under **Notification Endpoints**, find the endpoint you want to disable.
+3. Click the blue toggle to disable the notification endpoint.
+
+## Update the name or description for notification endpoint
+
+1. Select the **Monitoring and Alerting** icon from the sidebar.
+
+
+ {{< nav-icon "alerts" >}}
+
+
+2. Under **Notification Endpoints**, hover over the name or description of the endpoint.
+3. Click the pencil icon to edit the field.
+4. Click outside of the field to save your changes.
+
+## Change endpoint details
+
+1. Select the **Monitoring and Alerting** icon from the sidebar.
+
+ {{< nav-icon "alerts" >}}
+
+2. Under **Notification Endpoints**, click the endpoint to update.
+3. Update details as needed, and then click **Edit a Notification Endpoint**. For details about each field, see [Create notification endpoints](/v2.0/monitor-alert/notification-endpoints/create/).
diff --git a/content/v2.0/monitor-alert/notification-endpoints/view.md b/content/v2.0/monitor-alert/notification-endpoints/view.md
new file mode 100644
index 000000000..a4c5342d9
--- /dev/null
+++ b/content/v2.0/monitor-alert/notification-endpoints/view.md
@@ -0,0 +1,44 @@
+---
+title: View notification endpoint history
+seotitle: View notification endpoint details and history
+description: >
+ View notification endpoint details and history in the InfluxDB UI.
+menu:
+ v2_0:
+ name: View endpoint history
+ parent: Manage notification endpoints
+weight: 202
+related:
+ - /v2.0/monitor-alert/checks/
+ - /v2.0/monitor-alert/notification-rules/
+cloud_all: true
+---
+
+View notification endpoint details and history in the InfluxDB user interface (UI).
+
+- [View notification endpoints](#view-notification-endpoints)
+- [View notification endpoint details](#view-notification-endpoint-details)
+- [View history notification endpoint history](#view-notification-endpoint-history), including statues and notifications sent to the endpoint
+
+## View notification endpoints
+
+- Click **Monitoring & Alerting** in the InfluxDB UI sidebar.
+
+ {{< nav-icon "alerts" >}}
+
+ In the **Notification Endpoints** column, view existing notification endpoints.
+
+## View notification endpoint details
+
+1. Click **Monitoring & Alerting** in the InfluxDB UI sidebar.
+2. In the **Notification Endpoints** column, click the name of the notification endpoint you want to view.
+3. View the notification endpoint destination, name, and information to connect to the endpoint.
+
+## View notification endpoint history
+
+1. Click **Monitoring & Alerting** in the InfluxDB UI sidebar.
+2. In the **Notification Endpoints** column, hover over the notification endpoint, click the **{{< icon "view" >}}** icon, then **View History**.
+The Check Statuses History page displays:
+
+ - Statuses generated for the selected notification endpoint
+ - Notifications sent to the selected notification endpoint
diff --git a/content/v2.0/monitor-alert/notification-rules/_index.md b/content/v2.0/monitor-alert/notification-rules/_index.md
new file mode 100644
index 000000000..0b7115605
--- /dev/null
+++ b/content/v2.0/monitor-alert/notification-rules/_index.md
@@ -0,0 +1,18 @@
+---
+title: Manage notification rules
+description: >
+ Manage notification rules in InfluxDB.
+weight: 103
+v2.0/tags: [monitor, notifications, alert]
+menu:
+ v2_0:
+ parent: Monitor & alert
+related:
+ - /v2.0/monitor-alert/checks/
+ - /v2.0/monitor-alert/notification-endpoints/
+cloud_all: true
+---
+
+The following articles provide information on managing your notification rules:
+
+{{< children >}}
diff --git a/content/v2.0/monitor-alert/notification-rules/create.md b/content/v2.0/monitor-alert/notification-rules/create.md
new file mode 100644
index 000000000..5bed355ea
--- /dev/null
+++ b/content/v2.0/monitor-alert/notification-rules/create.md
@@ -0,0 +1,43 @@
+---
+title: Create notification rules
+description: >
+ Create notification rules to send alerts on your time series data.
+weight: 201
+menu:
+ v2_0:
+ parent: Manage notification rules
+related:
+ - /v2.0/monitor-alert/checks/
+ - /v2.0/monitor-alert/notification-endpoints/
+cloud_all: true
+---
+
+Once you've set up checks and notification endpoints, create notification rules to alert you.
+_For details, see [Manage checks](/v2.0/monitor-alert/checks/) and
+[Manage notification endpoints](/v2.0/monitor-alert/notification-endpoints/)._
+
+## Create a new notification rule in the UI
+
+1. Select the **Monitoring and Alerting** icon from the sidebar.
+
+ {{< nav-icon "alerts" >}}
+
+2. Under **Notification Rules**, click **+Create**.
+3. Complete the **About** section:
+ 1. In the **Name** field, enter a name for the notification rule.
+ 2. In the **Schedule Every** field, enter how frequently the rule should run.
+ 3. In the **Offset** field, enter an offset time. For example,if a task runs on the hour, a 10m offset delays the task to 10 minutes after the hour. Time ranges defined in the task are relative to the specified execution time.
+4. In the **Conditions** section, build a condition using a combination of status and tag keys.
+ - Next to **When status is equal to**, select a status from the drop-down field.
+ - Next to **AND When**, enter one or more tag key-value pairs to filter by.
+5. In the **Message** section, select an endpoint to notify.
+6. Click **Create Notification Rule**.
+
+## Clone an existing notification rule in the UI
+
+1. Select the **Monitoring and Alerting** icon from the sidebar.
+
+ {{< nav-icon "alerts" >}}
+
+2. Under **Notification Rules**, hover over the rule you want to clone.
+3. Click the clone icon and select **Clone**. The cloned rule appears.
diff --git a/content/v2.0/monitor-alert/notification-rules/delete.md b/content/v2.0/monitor-alert/notification-rules/delete.md
new file mode 100644
index 000000000..7ebfca923
--- /dev/null
+++ b/content/v2.0/monitor-alert/notification-rules/delete.md
@@ -0,0 +1,22 @@
+---
+title: Delete notification rules
+description: >
+ If you no longer need to receive an alert, delete the associated notification rule.
+weight: 204
+menu:
+ v2_0:
+ parent: Manage notification rules
+related:
+ - /v2.0/monitor-alert/checks/
+ - /v2.0/monitor-alert/notification-endpoints/
+cloud_all: true
+---
+
+## Delete a notification rule in the UI
+
+1. Select the **Monitoring and Alerting** icon from the sidebar.
+
+ {{< nav-icon "alerts" >}}
+
+2. Under **Notification Rules**, find the rule you want to delete.
+3. Click the delete icon, then click **Delete** to confirm.
diff --git a/content/v2.0/monitor-alert/notification-rules/update.md b/content/v2.0/monitor-alert/notification-rules/update.md
new file mode 100644
index 000000000..7b9960fb5
--- /dev/null
+++ b/content/v2.0/monitor-alert/notification-rules/update.md
@@ -0,0 +1,52 @@
+---
+title: Update notification rules
+description: >
+ Update notification rules to update the notification message or change the schedule or conditions.
+weight: 203
+menu:
+ v2_0:
+ parent: Manage notification rules
+related:
+ - /v2.0/monitor-alert/checks/
+ - /v2.0/monitor-alert/notification-endpoints/
+cloud_all: true
+---
+
+## Add a label to notification rules
+
+1. Select the **Monitoring and Alerting** icon from the sidebar.
+
+ {{< nav-icon "alerts" >}}
+
+2. Under **Notification Rules**, click **Add a label** next to the rule you want to add a label to. The **Add Labels** box opens.
+3. To add an existing label, select the label from the list.
+4. To create and add a new label:
+ - In the search field, enter the name of the new label. The **Create Label** box opens.
+ - In the **Description** field, enter an optional description for the label.
+ - Select a color for the label.
+ - Click **Create Label**.
+5. To remove a label, hover over the label under to a rule and click X.
+
+
+## Disable notification rules
+
+1. Select the **Monitoring and Alerting** icon from the sidebar.
+
+
+ {{< nav-icon "alerts" >}}
+
+
+2. Under **Notification Rules**, find the rule you want to disable.
+3. Click the blue toggle to disable the notification rule.
+
+## Update the name or description for notification rules
+
+1. Select the **Monitoring and Alerting** icon from the sidebar.
+
+
+ {{< nav-icon "alerts" >}}
+
+
+2. Under **Notification Rules**, hover over the name or description of a rule.
+3. Click the pencil icon to edit the field.
+4. Click outside of the field to save your changes.
diff --git a/content/v2.0/monitor-alert/notification-rules/view.md b/content/v2.0/monitor-alert/notification-rules/view.md
new file mode 100644
index 000000000..5dad401c4
--- /dev/null
+++ b/content/v2.0/monitor-alert/notification-rules/view.md
@@ -0,0 +1,43 @@
+---
+title: View notification rules
+description: >
+ Update notification rules to update the notification message or change the schedule or conditions.
+weight: 202
+menu:
+ v2_0:
+ parent: Manage notification rules
+related:
+ - /v2.0/monitor-alert/checks/
+ - /v2.0/monitor-alert/notification-endpoints/
+cloud_all: true
+---
+
+View notification rule details and statuses and notifications generated by notification rules in the InfluxDB user interface (UI).
+
+- [View a list of all notification rules](#view-a-list-of-all-notification-rules)
+- [View notification rule details](#view-notification-rule-details)
+- [View statuses generated by a check](#view-statuses-generated-by-a-notification-rule)
+- [View notifications triggered by a notification rule](#view-notifications-triggered-by-a-notification-rule)
+
+To view notification rules, click **Monitoring & Alerting** in the InfluxDB UI sidebar.
+
+{{< nav-icon "alerts" >}}
+
+## View a list of all notification rules
+The **Notification Rules** column on the Monitoring & Alerting landing page displays all existing checks.
+
+## View notification rule details
+In the **Notification Rules** column, click the name of the check you want to view.
+The check builder appears.
+Here you can view the check query and logic.
+
+## View statuses generated by a notification rule
+1. In the **Notification Rules** column, hover over the check, click the **{{< icon "view" >}}**
+ icon, then **View History**.
+ The Statuses History page displays statuses generated by the selected check.
+
+## View notifications triggered by a notification rule
+1. In the **Notification Rules** column, hover over the notification rule, click the **{{< icon "view" >}}**
+ icon, then **View History**.
+2. In the top left corner, click **Notifications**.
+ The Notifications History page displays notifications initiated by the selected notification rule.
diff --git a/content/v2.0/organizations/buckets/create-bucket.md b/content/v2.0/organizations/buckets/create-bucket.md
index 0572d2a70..ff8715cb3 100644
--- a/content/v2.0/organizations/buckets/create-bucket.md
+++ b/content/v2.0/organizations/buckets/create-bucket.md
@@ -14,14 +14,14 @@ to create a bucket.
## Create a bucket in the InfluxDB UI
-1. Click the **Settings** tab in the navigation bar.
+1. Click **Load Data** in the navigation bar.
- {{< nav-icon "settings" >}}
+ {{< nav-icon "load data" >}}
-2. Select the **Buckets** tab.
+2. Select **Buckets**.
3. Click **{{< icon "plus" >}} Create Bucket** in the upper right.
4. Enter a **Name** for the bucket.
-5. Select **How often to clear data?**:
+5. Select **Delete Data older than**:
Select **Never** to retain data forever.
Select **Periodically** to define a specific retention policy.
5. Click **Create** to create the bucket.
diff --git a/content/v2.0/organizations/buckets/delete-bucket.md b/content/v2.0/organizations/buckets/delete-bucket.md
index 3622b684c..e1652ce12 100644
--- a/content/v2.0/organizations/buckets/delete-bucket.md
+++ b/content/v2.0/organizations/buckets/delete-bucket.md
@@ -14,13 +14,13 @@ to delete a bucket.
## Delete a bucket in the InfluxDB UI
-1. Click the **Settings** tab in the navigation bar.
+1. Click **Load Data** in the navigation bar.
- {{< nav-icon "settings" >}}
+ {{< nav-icon "load data" >}}
-2. Select the **Buckets** tab.
+2. Select **Buckets**.
3. Hover over the bucket you would like to delete.
-4. Click **Delete** and **Confirm** to delete the bucket.
+4. Click **{{< icon "delete" >}} Delete Bucket** and **Delete** to delete the bucket.
## Delete a bucket using the influx CLI
diff --git a/content/v2.0/organizations/buckets/update-bucket.md b/content/v2.0/organizations/buckets/update-bucket.md
index f113d9ac7..76e5b11f7 100644
--- a/content/v2.0/organizations/buckets/update-bucket.md
+++ b/content/v2.0/organizations/buckets/update-bucket.md
@@ -23,23 +23,23 @@ If you change a bucket name, be sure to update the bucket in the above places as
## Update a bucket's name in the InfluxDB UI
-1. Click the **Settings** tab in the navigation bar.
+1. Click **Load Data** in the navigation bar.
- {{< nav-icon "settings" >}}
+ {{< nav-icon "load data" >}}
-2. Select the **Buckets** tab.
+2. Select **Buckets**.
3. Hover over the name of the bucket you want to rename in the list.
4. Click **Rename**.
5. Review the information in the window that appears and click **I understand, let's rename my bucket**.
-6. Update the bucket's name and click **Change Bucket Name**.
+6. Update the bucket's name and click **Change Bucket Name**.
## Update a bucket's retention policy in the InfluxDB UI
-1. Click the **Settings** tab in the navigation bar.
+1. Click **Load Data** in the navigation bar.
- {{< nav-icon "settings" >}}
+ {{< nav-icon "load data" >}}
-2. Select the **Buckets** tab.
+2. Select **Buckets**.
3. Click the name of the bucket you want to update from the list.
4. In the window that appears, edit the bucket's retention policy.
5. Click **Save Changes**.
diff --git a/content/v2.0/organizations/buckets/view-buckets.md b/content/v2.0/organizations/buckets/view-buckets.md
index 5d47f5211..2fd8049e9 100644
--- a/content/v2.0/organizations/buckets/view-buckets.md
+++ b/content/v2.0/organizations/buckets/view-buckets.md
@@ -11,11 +11,11 @@ weight: 202
## View buckets in the InfluxDB UI
-1. Click the **Settings** tab in the navigation bar.
+1. Click **Load Data** in the navigation bar.
- {{< nav-icon "settings" >}}
+ {{< nav-icon "load data" >}}
-2. Select the **Buckets** tab.
+2. Select **Buckets**.
3. Click on a bucket to view details.
## View buckets using the influx CLI
diff --git a/content/v2.0/reference/flux/functions/built-in/transformations/aggregates/aggregatewindow.md b/content/v2.0/reference/flux/functions/built-in/transformations/aggregates/aggregatewindow.md
index 613487875..435fa5030 100644
--- a/content/v2.0/reference/flux/functions/built-in/transformations/aggregates/aggregatewindow.md
+++ b/content/v2.0/reference/flux/functions/built-in/transformations/aggregates/aggregatewindow.md
@@ -30,6 +30,10 @@ As data is windowed into separate tables and processed, the `_time` column is dr
This function copies the timestamp from a remaining column into the `_time` column.
View the [function definition](#function-definition).
+`aggregateWindow()` restores the original `_start` and `_stop` values of input data
+and, by default, uses `_stop` to set the `_time` value for each aggregated window.
+Each row in the output of `aggregateWindow` represents an aggregated window ending at `_time`.
+
## Parameters
{{% note %}}
diff --git a/content/v2.0/reference/flux/functions/built-in/transformations/aggregates/kaufmansama.md b/content/v2.0/reference/flux/functions/built-in/transformations/aggregates/kaufmansama.md
new file mode 100644
index 000000000..1944d041d
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/built-in/transformations/aggregates/kaufmansama.md
@@ -0,0 +1,52 @@
+---
+title: kaufmansAMA() function
+description: >
+ The `kaufmansAMA()` function calculates the Kaufman's Adaptive Moving Average (KAMA)
+ using values in an input table.
+menu:
+ v2_0_ref:
+ name: kaufmansAMA
+ parent: built-in-aggregates
+weight: 501
+related:
+ - /v2.0/reference/flux/functions/built-in/transformations/aggregates/kaufmanser/
+ - https://docs.influxdata.com/influxdb/v1.7/query_language/functions/#kaufmans-adaptive-moving-average, InfluxQL KAUFMANS_ADAPTIVE_MOVING_AVERAGE()
+---
+
+The `kaufmansAMA()` function calculates the Kaufman's Adaptive Moving Average (KAMA)
+using values in an input table.
+
+_**Function type:** Aggregate_
+
+```js
+kaufmansAMA(
+ n: 10,
+ column: "_value"
+)
+```
+
+Kaufman's Adaptive Moving Average is a trend-following indicator designed to account
+for market noise or volatility.
+
+## Parameters
+
+### n
+The period or number of points to use in the calculation.
+
+_**Data type: Integer**_
+
+### column
+The column to operate on.
+Defaults to `"_value"`.
+
+_**Data type: String**_
+
+## Examples
+```js
+from(bucket: "telegraf/autogen"):
+ |> range(start: -7d)
+ |> kaufmansAMA(
+ n: 10,
+ column: "_value"
+ )
+```
diff --git a/content/v2.0/reference/flux/functions/built-in/transformations/aggregates/kaufmanser.md b/content/v2.0/reference/flux/functions/built-in/transformations/aggregates/kaufmanser.md
new file mode 100644
index 000000000..5f77fc1d6
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/built-in/transformations/aggregates/kaufmanser.md
@@ -0,0 +1,42 @@
+---
+title: kaufmansER() function
+description: >
+ The `kaufmansER()` function calculates the Kaufman's Efficiency Ratio (KER) using
+ values in an input table.
+menu:
+ v2_0_ref:
+ name: kaufmansER
+ parent: built-in-aggregates
+weight: 501
+related:
+ - /v2.0/reference/flux/functions/built-in/transformations/aggregates/kaufmansama/
+ - https://docs.influxdata.com/influxdb/v1.7/query_language/functions/#kaufmans-efficiency-ratio, InfluxQL KAUFMANS_EFFICIENCY_RATIO()
+---
+
+The `kaufmansER()` function calculates the Kaufman's Efficiency Ratio (KER) using
+values in an input table.
+The function operates on the `_value` column.
+
+_**Function type:** Aggregate_
+
+```js
+kaufmansER(n: 10)
+```
+
+Kaufman's Efficiency Ratio indicator divides the absolute value of the
+Chande Momentum Oscillator by 100 to return a value between 0 and 1.
+Higher values represent a more efficient or trending market.
+
+## Parameters
+
+### n
+The period or number of points to use in the calculation.
+
+_**Data type: Integer**_
+
+## Examples
+```js
+from(bucket: "example-bucket")
+ |> range(start: -7d)
+ |> kaufmansER(n: 10)
+```
diff --git a/content/v2.0/reference/flux/functions/built-in/transformations/aggregates/mode.md b/content/v2.0/reference/flux/functions/built-in/transformations/aggregates/mode.md
index ef3916c57..7ad9cfdd8 100644
--- a/content/v2.0/reference/flux/functions/built-in/transformations/aggregates/mode.md
+++ b/content/v2.0/reference/flux/functions/built-in/transformations/aggregates/mode.md
@@ -19,7 +19,8 @@ _**Function type:** Aggregate_
mode(column: "_value")
```
-Multiple modes are returned in a sorted table.
+If there are multiple modes, it returns all of them in a sorted table.
+Mode only considers non-null values.
If there is no mode, `mode()` returns `null`.
##### Supported data types
diff --git a/content/v2.0/reference/flux/functions/built-in/transformations/aggregates/tripleexponentialderivative.md b/content/v2.0/reference/flux/functions/built-in/transformations/aggregates/tripleexponentialderivative.md
new file mode 100644
index 000000000..4fa7c2137
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/built-in/transformations/aggregates/tripleexponentialderivative.md
@@ -0,0 +1,67 @@
+---
+title: tripleExponentialDerivative() function
+description: >
+ The `tripleExponentialDerivative()` function calculates a triple exponential
+ derivative (TRIX) of input tables using `n` points.
+menu:
+ v2_0_ref:
+ name: tripleExponentialDerivative
+ parent: built-in-aggregates
+weight: 501
+v2.0/tags: [technical analysis]
+related:
+ - /v2.0/reference/flux/functions/built-in/transformations/aggregates/movingaverage/
+ - /v2.0/reference/flux/functions/built-in/transformations/aggregates/doubleema/
+ - /v2.0/reference/flux/functions/built-in/transformations/aggregates/tripleema/
+ - /v2.0/reference/flux/functions/built-in/transformations/aggregates/timedmovingaverage/
+ - /v2.0/reference/flux/functions/built-in/transformations/aggregates/exponentialmovingaverage/
+ - https://docs.influxdata.com/influxdb/v1.7/query_language/functions/#triple-exponential-derivative, InfluxQL TRIPLE_EXPONENTIAL_DERIVATIVE()
+---
+
+The `tripleExponentialDerivative()` function calculates a triple exponential
+derivative ([TRIX](https://en.wikipedia.org/wiki/Trix_(technical_analysis))) of
+input tables using `n` points.
+
+_**Function type:** Aggregate_
+
+```js
+tripleExponentialDerivative(n: 5)
+```
+
+Triple exponential derivative, commonly referred to as “TRIX,” is a momentum indicator and oscillator.
+A triple exponential derivative uses the natural logarithm (log) of input data to
+calculate a triple exponential moving average over the period of time.
+The calculation prevents cycles shorter than the defined period from being considered by the indicator.
+`tripleExponentialDerivative()` uses the time between `n` points to define the period.
+
+Triple exponential derivative oscillates around a zero line.
+A positive momentum **oscillator** value indicates an overbought market;
+a negative value indicates an oversold market.
+A positive momentum **indicator** value indicates increasing momentum;
+a negative value indicates decreasing momentum.
+
+##### Triple exponential moving average rules
+- A triple exponential derivative is defined as:
+ - `TRIX[i] = ((EMA3[i] / EMA3[i - 1]) - 1) * 100`:
+ - `EMA_3 = EMA(EMA(EMA(data)))`
+- If there are not enough values to calculate a triple exponential derivative,
+ the output `_value` is `NaN`; all other columns are the same as the _last_ record of the input table.
+- The function behaves the same way as the [`exponentialMovingAverage()`](/v2.0/reference/flux/functions/built-in/transformations/aggregates/exponentialmovingaverage/) function:
+ - The function does not include `null` values in the calculation.
+ - The function acts only on the `_value` column.
+
+## Parameters
+
+### n
+The number of points to use in the calculation.
+
+_**Data type:** Integer_
+
+## Examples
+
+#### Calculate a five point triple exponential derivative
+```js
+from(bucket: "example-bucket"):
+ |> range(start: -12h)
+ |> tripleExponentialDerivative(n: 5)
+```
diff --git a/content/v2.0/reference/flux/functions/built-in/transformations/range.md b/content/v2.0/reference/flux/functions/built-in/transformations/range.md
index bb7a142b4..371cce541 100644
--- a/content/v2.0/reference/flux/functions/built-in/transformations/range.md
+++ b/content/v2.0/reference/flux/functions/built-in/transformations/range.md
@@ -26,26 +26,24 @@ range(start: -15m, stop: now())
## Parameters
### start
-Specifies the oldest time to be included in the results.
+The earliest time to include in results.
+Use a relative duration or absolute time.
+For example, `-1h` or `2019-08-28T22:00:00Z`.
+Durations are relative to `now()`.
-Relative start times are defined using negative durations.
-Negative durations are relative to now.
-Absolute start times are defined using timestamps.
-
-_**Data type:** Duration or Timestamp_
+_**Data type:** Duration | Time_
### stop
-Specifies the newest time to be included in the results. Defaults to `now`.
+The latest time to include in results.
+Use a relative duration or absolute time.
+For example, `-1h` or `2019-08-28T22:00:00Z`.
+Durations are relative to `now()`.
+Defaults to `now()`.
-Relative stop times are defined using negative durations.
-Negative durations are relative to now.
-Absolute stop times are defined using timestamps.
-
-_**Data type:** Duration or Timestamp_
+_**Data type:** Duration | Time_
{{% note %}}
-Flux only honors [RFC3339 timestamps](/v2.0/reference/flux/language/types#timestamp-format)
-and ignores dates and times provided in other formats.
+Time values in Flux must be in [RFC3339 format](/v2.0/reference/flux/language/types#timestamp-format).
{{% /note %}}
## Examples
diff --git a/content/v2.0/reference/flux/functions/built-in/transformations/truncatetimecolumn.md b/content/v2.0/reference/flux/functions/built-in/transformations/truncatetimecolumn.md
new file mode 100644
index 000000000..164091a53
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/built-in/transformations/truncatetimecolumn.md
@@ -0,0 +1,53 @@
+---
+title: truncateTimeColumn() function
+description: >
+ The `truncateTimeColumn()` function truncates all input table `_time` values to a specified unit.
+menu:
+ v2_0_ref:
+ name: truncateTimeColumn
+ parent: built-in-transformations
+weight: 401
+related:
+ - /v2.0/reference/flux/functions/date/truncate/
+---
+
+The `truncateTimeColumn()` function truncates all input table `_time` values to a specified unit.
+
+_**Function type:** Transformation_
+
+```js
+truncateTimeColumn(unit: 1s)
+```
+
+## Parameters
+
+### unit
+The unit of time to truncate to.
+
+_**Data type:** Duration_
+
+{{% note %}}
+Only use `1` and the unit of time to specify the `unit`.
+For example: `1s`, `1m`, `1h`.
+{{% /note %}}
+
+## Examples
+
+##### Truncate all time values to seconds
+```js
+from(bucket:"example-bucket")
+ |> range(start:-1h)
+ |> truncateTimeColumn(unit: 1s)
+```
+
+## Function definition
+```js
+import "date"
+
+truncateTimeColumn = (unit, tables=<-) =>
+ tables
+ |> map(fn: (r) => ({
+ r with _time: date.truncate(t: r._time, unit:unit)
+ })
+ )
+```
diff --git a/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/bool.md b/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/bool.md
index 9d1f16127..e2124006c 100644
--- a/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/bool.md
+++ b/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/bool.md
@@ -25,8 +25,7 @@ The value to convert.
## Examples
```js
from(bucket: "sensor-data")
- |> filter(fn:(r) =>
- r._measurement == "system" and
- )
+ |> range(start: -1m)
+ |> filter(fn:(r) => r._measurement == "system" )
|> map(fn:(r) => ({ r with responsive: bool(v: r.responsive) }))
```
diff --git a/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/bytes.md b/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/bytes.md
new file mode 100644
index 000000000..c4bf8212e
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/bytes.md
@@ -0,0 +1,30 @@
+---
+title: bytes() function
+description: The `bytes()` function converts a single value to bytes.
+menu:
+ v2_0_ref:
+ name: bytes
+ parent: built-in-type-conversions
+weight: 502
+---
+
+The `bytes()` function converts a single value to bytes.
+
+_**Function type:** Type conversion_
+_**Output data type:** Bytes_
+
+```js
+bytes(v: "1m")
+```
+
+## Parameters
+
+### v
+The value to convert.
+
+## Examples
+```js
+from(bucket: "sensor-data")
+ |> range(start: -1m)
+ |> map(fn:(r) => ({ r with _value: bytes(v: r._value) }))
+```
diff --git a/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/duration.md b/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/duration.md
index 02c669b8b..bb3a79a28 100644
--- a/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/duration.md
+++ b/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/duration.md
@@ -25,8 +25,7 @@ The value to convert.
## Examples
```js
from(bucket: "sensor-data")
- |> filter(fn:(r) =>
- r._measurement == "system" and
- )
+ |> range(start: -1m)
+ |> filter(fn:(r) => r._measurement == "system" )
|> map(fn:(r) => ({ r with uptime: duration(v: r.uptime) }))
```
diff --git a/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/float.md b/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/float.md
index 7e7251dd1..c077410db 100644
--- a/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/float.md
+++ b/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/float.md
@@ -25,8 +25,7 @@ The value to convert.
## Examples
```js
from(bucket: "sensor-data")
- |> filter(fn:(r) =>
- r._measurement == "camera" and
- )
+ |> range(start: -1m)
+ |> filter(fn:(r) => r._measurement == "camera" )
|> map(fn:(r) => ({ r with aperature: float(v: r.aperature) }))
```
diff --git a/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/int.md b/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/int.md
index ed495fc21..4085a88ce 100644
--- a/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/int.md
+++ b/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/int.md
@@ -25,8 +25,7 @@ The value to convert.
## Examples
```js
from(bucket: "sensor-data")
- |> filter(fn:(r) =>
- r._measurement == "camera" and
- )
+ |> range(start: -1m)
+ |> filter(fn:(r) => r._measurement == "camera" )
|> map(fn:(r) => ({ r with exposures: int(v: r.exposures) }))
```
diff --git a/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/string.md b/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/string.md
index b3c092602..4c892b569 100644
--- a/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/string.md
+++ b/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/string.md
@@ -25,8 +25,7 @@ The value to convert.
## Examples
```js
from(bucket: "sensor-data")
- |> filter(fn:(r) =>
- r._measurement == "system" and
- )
+ |> range(start: -1m)
+ |> filter(fn:(r) => r._measurement == "system" )
|> map(fn:(r) => ({ r with model_number string(v: r.model_number) }))
```
diff --git a/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/time.md b/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/time.md
index fd6afb49e..1bd9c324a 100644
--- a/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/time.md
+++ b/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/time.md
@@ -25,8 +25,7 @@ The value to convert.
## Examples
```js
from(bucket: "sensor-data")
- |> filter(fn:(r) =>
- r._measurement == "system" and
- )
+ |> range(start: -1m)
+ |> filter(fn:(r) => r._measurement == "system" )
|> map(fn:(r) => ({ r with timestamp: time(v: r.timestamp) }))
```
diff --git a/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/uint.md b/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/uint.md
index 68ade7713..1c72dcc67 100644
--- a/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/uint.md
+++ b/content/v2.0/reference/flux/functions/built-in/transformations/type-conversions/uint.md
@@ -25,8 +25,7 @@ The value to convert.
## Examples
```js
from(bucket: "sensor-data")
- |> filter(fn:(r) =>
- r._measurement == "camera" and
- )
+ |> range(start: -1m)
+ |> filter(fn:(r) => r._measurement == "camera" )
|> map(fn:(r) => ({ r with exposures: uint(v: r.exposures) }))
```
diff --git a/content/v2.0/reference/flux/functions/date/truncate.md b/content/v2.0/reference/flux/functions/date/truncate.md
index c9f7db136..960bd999a 100644
--- a/content/v2.0/reference/flux/functions/date/truncate.md
+++ b/content/v2.0/reference/flux/functions/date/truncate.md
@@ -32,7 +32,7 @@ The time to operate on.
_**Data type:** Time_
### unit
-The unit time to truncate to.
+The unit of time to truncate to.
_**Data type:** Duration_
diff --git a/content/v2.0/reference/flux/functions/http/_index.md b/content/v2.0/reference/flux/functions/http/_index.md
new file mode 100644
index 000000000..575108bfb
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/http/_index.md
@@ -0,0 +1,22 @@
+---
+title: Flux HTTP package
+list_title: HTTP package
+description: >
+ The Flux HTTP package provides functions for transferring data using the HTTP protocol.
+ Import the `http` package.
+menu:
+ v2_0_ref:
+ name: HTTP
+ parent: Flux packages and functions
+weight: 202
+v2.0/tags: [functions, http, package]
+---
+
+The Flux HTTP package provides functions for transferring data using the HTTP protocol.
+Import the `http` package:
+
+```js
+import "http"
+```
+
+{{< children type="functions" show="pages" >}}
diff --git a/content/v2.0/reference/flux/functions/http/basicauth.md b/content/v2.0/reference/flux/functions/http/basicauth.md
new file mode 100644
index 000000000..3ea42a485
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/http/basicauth.md
@@ -0,0 +1,56 @@
+---
+title: http.basicAuth() function
+description: >
+ The `http.basicAuth()` function returns a Base64-encoded basic authentication
+ header using a specified username and password combination.
+menu:
+ v2_0_ref:
+ name: http.basicAuth
+ parent: HTTP
+weight: 202
+---
+
+The `http.basicAuth()` function returns a Base64-encoded basic authentication
+header using a specified username and password combination.
+
+_**Function type:** Miscellaneous_
+
+```js
+import "http"
+
+http.basicAuth(
+ u: "username"
+ p: "passw0rd"
+)
+
+// Returns "Basic dXNlcm5hbWU6cGFzc3cwcmQ="
+```
+
+## Parameters
+
+### u
+The username to use in the basic authentication header.
+
+_**Data type:** String_
+
+### p
+The password to use in the basic authentication header.
+
+_**Data type:** String_
+
+## Examples
+
+##### Set a basic authentication header in an HTTP POST request
+```js
+import "monitor"
+import "http"
+
+username = "myawesomeuser"
+password = "mySupErSecRetPasSW0rD"
+
+http.post(
+ url: "http://myawesomesite.com/api/",
+ headers: {Authorization: http.basicAuth(u:username, p:password)},
+ data: bytes(v: "something I want to send.")
+)
+```
diff --git a/content/v2.0/reference/flux/functions/http/endpoint.md b/content/v2.0/reference/flux/functions/http/endpoint.md
new file mode 100644
index 000000000..df67ea6af
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/http/endpoint.md
@@ -0,0 +1,64 @@
+---
+title: http.endpoint() function
+description: >
+ The `http.endpoint()` function sends output data to an HTTP URL using the POST request method.
+menu:
+ v2_0_ref:
+ name: http.endpoint
+ parent: HTTP
+weight: 202
+v2.0/tags: [endpoints]
+---
+
+The `http.endpoint()` function sends output data to an HTTP URL using the POST request method.
+
+_**Function type:** Output_
+
+```js
+import "http"
+
+http.endpoint(
+ url: "http://localhost:1234/"
+)
+```
+
+## Parameters
+
+### url
+The URL to POST to.
+
+_**Data type:** String_
+
+### mapFn
+A function that builds the object used to generate the POST request.
+
+{{% note %}}
+_You should rarely need to override the default `mapFn` parameter.
+To see the default `mapFn` value or for insight into possible overrides, view the
+[`http.endpoint()` source code](https://github.com/influxdata/flux/blob/master/stdlib/http/http.flux)._
+{{% /note %}}
+
+_**Data type:** Function_
+
+The returned object must include the following fields:
+
+- `headers`
+- `data`
+
+_For more information, see [`http.post()`](/v2.0/reference/flux/functions/http/post/)_
+
+## Examples
+
+##### Send critical statuses to an HTTP endpoint
+```js
+import "monitor"
+import "http"
+
+endpoint = http.endpoint(url: "http://myawsomeurl.com/api/notify")
+
+from(bucket: "example-bucket")
+ |> range(start: -1m)
+ |> filter(fn: (r) => r._measurement == "statuses" and status == "crit")
+ |> map(fn: (r) => { return {status: r._status} })
+ |> monitor.notify(endpoint: endpoint)
+```
diff --git a/content/v2.0/reference/flux/functions/http/post.md b/content/v2.0/reference/flux/functions/http/post.md
new file mode 100644
index 000000000..214c15833
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/http/post.md
@@ -0,0 +1,64 @@
+---
+title: http.post() function
+description: >
+ The `http.post()` function submits an HTTP POST request to the specified URL with headers and data.
+ The HTTP status code is returned.
+menu:
+ v2_0_ref:
+ name: http.post
+ parent: HTTP
+weight: 202
+---
+
+The `http.post()` function submits an HTTP POST request to the specified URL with
+headers and data and returns the HTTP status code.
+
+_**Function type:** Output_
+
+```js
+import "http"
+
+http.post(
+ url: "http://localhost:9999/",
+ headers: {x:"a", y:"b", z:"c"},
+ data: bytes(v: "body")
+)
+```
+
+## Parameters
+
+### url
+The URL to POST to.
+
+_**Data type:** String_
+
+### headers
+Headers to include with the POST request.
+
+_**Data type:** Object_
+
+### data
+The data body to include with the POST request.
+
+_**Data type:** Bytes_
+
+## Examples
+
+##### Send the last reported status to a URL
+```js
+import "json"
+import "http"
+
+lastReported =
+ from(bucket: "example-bucket")
+ |> range(start: -1m)
+ |> filter(fn: (r) => r._measurement == "statuses")
+ |> last()
+ |> map(fn: (r) => { return {status: r._status} })
+
+http.post(
+ url: "http://myawsomeurl.com/api/notify",
+ headers: {Authorization: "Bearer mySuPerSecRetTokEn"},
+ data: bytes(v: lastReported)
+)
+```
diff --git a/content/v2.0/reference/flux/functions/json/_index.md b/content/v2.0/reference/flux/functions/json/_index.md
new file mode 100644
index 000000000..ca7b8a82f
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/json/_index.md
@@ -0,0 +1,22 @@
+---
+title: Flux JSON package
+list_title: JSON package
+description: >
+ The Flux JSON package provides functions for working with JSON.
+ Import the `json` package.
+menu:
+ v2_0_ref:
+ name: JSON
+ parent: Flux packages and functions
+weight: 202
+v2.0/tags: [functions, json, package]
+---
+
+JSON Flux functions provide tools for working with JSON.
+Import the `json` package:
+
+```js
+import "json"
+```
+
+{{< children type="functions" show="pages" >}}
diff --git a/content/v2.0/reference/flux/functions/json/encode.md b/content/v2.0/reference/flux/functions/json/encode.md
new file mode 100644
index 000000000..640241b34
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/json/encode.md
@@ -0,0 +1,47 @@
+---
+title: json.encode() function
+description: The `json.encode()` function converts a value into JSON bytes.
+menu:
+ v2_0_ref:
+ name: json.encode
+ parent: JSON
+weight: 202
+---
+
+The `json.encode()` function converts a value into JSON bytes.
+
+_**Function type:** Type conversion_
+
+```js
+import "json"
+
+json.encode(v: "some value")
+```
+
+This function encodes [Flux types](/v2.0/reference/flux/language/types/) as follows:
+
+- `time` values in [RFC3339](https://tools.ietf.org/html/rfc3339) format
+- `duration` values in number of milliseconds since the epoch
+- `regexp` values as their string representation
+- `bytes` values as base64-encoded strings
+- `function` values are not encoded and produce an error
+
+## Parameters
+
+### v
+The value to convert.
+
+_**Data type:** Boolean | Duration | Float | Integer | String | Time | UInteger_
+
+## Examples
+
+### Encode all values in a column in JSON bytes
+```js
+import "json"
+
+from(bucket: "example-bucket")
+ |> range(start: -1h)
+ |> map(fn: (r) => ({
+ r with _value: json.encode(v: r._value)
+ }))
+```
diff --git a/content/v2.0/reference/flux/functions/monitor/_index.md b/content/v2.0/reference/flux/functions/monitor/_index.md
new file mode 100644
index 000000000..12271be11
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/monitor/_index.md
@@ -0,0 +1,22 @@
+---
+title: Flux InfluxDB Monitor package
+list_title: InfluxDB Monitor package
+description: >
+ The Flux Monitor package provides tools for monitoring and alerting with InfluxDB.
+ Import the `influxdata/influxdb/monitor` package.
+menu:
+ v2_0_ref:
+ name: InfluxDB Monitor
+ parent: Flux packages and functions
+weight: 202
+v2.0/tags: [functions, monitor, alerts, package]
+---
+
+The Flux monitor package provides tools for monitoring and alerting with InfluxDB.
+Import the `influxdata/influxdb/monitor` package:
+
+```js
+import "influxdata/influxdb/monitor"
+```
+
+{{< children type="functions" show="pages" >}}
diff --git a/content/v2.0/reference/flux/functions/monitor/check.md b/content/v2.0/reference/flux/functions/monitor/check.md
new file mode 100644
index 000000000..ce8de7b7f
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/monitor/check.md
@@ -0,0 +1,95 @@
+---
+title: monitor.check() function
+description: >
+ The `monitor.check()` function function checks input data and assigns a level
+ (`ok`, `info`, `warn`, or `crit`) to each row based on predicate functions.
+menu:
+ v2_0_ref:
+ name: monitor.check
+ parent: InfluxDB Monitor
+weight: 202
+---
+
+The `monitor.check()` function function checks input data and assigns a level
+(`ok`, `info`, `warn`, or `crit`) to each row based on predicate functions.
+
+_**Function type:** Transformation_
+
+```js
+import "influxdata/influxdb/monitor"
+
+monitor.check(
+ crit: (r) => r._value > 90.0,
+ warn: (r) => r._value > 80.0,
+ info: (r) => r._value > 60.0,
+ ok: (r) => r._value <= 20.0,
+ messageFn: (r) => "The current level is ${r._level}",
+ data: {}
+)
+```
+
+`monitor.check()` stores statuses in the `_level` column and writes results
+to the `statuses` measurement in the `_monitoring` bucket.
+
+## Parameters
+
+### crit
+Predicate function that determines `crit` status.
+Default is `(r) => false`.
+
+_**Data type:** Function_
+
+### warn
+Predicate function that determines `warn` status.
+Default is `(r) => false`.
+
+_**Data type:** Function_
+
+### info
+Predicate function that determines `info` status.
+Default is `(r) => false`.
+
+_**Data type:** Function_
+
+### ok
+Predicate function that determines `ok` status.
+Default is `(r) => true`.
+
+_**Data type:** Function_
+
+### messageFn
+A function that constructs a message to append to each row.
+The message is stored in the `_message` column.
+
+_**Data type:** Function_
+
+### data
+Data to append to the output.
+**InfluxDB populates check data.**
+
+_**Data type:** Object_
+
+## Examples
+
+### Monitor disk usage
+```js
+import "influxdata/influxdb/monitor"
+
+from(bucket: "telegraf")
+ |> range(start: -1h)
+ |> filter(fn: (r) =>
+ r._measurement == "disk" and
+ r._field = "used_percent"
+ )
+ |> monitor.check(
+ crit: (r) => r._value > 90.0,
+ warn: (r) => r._value > 80.0,
+ info: (r) => r._value > 70.0,
+ ok: (r) => r._value <= 60.0,
+ messageFn: (r) =>
+ if r._level == "crit" then "Critical alert!! Disk usage is at ${r._value}%!"
+ else if r._level == "warn" then "Warning! Disk usage is at ${r._value}%."
+ else if r._level == "info" then "Disk usage is at ${r._value}%."
+ else "Things are looking good."
+ )
+```
diff --git a/content/v2.0/reference/flux/functions/monitor/deadman.md b/content/v2.0/reference/flux/functions/monitor/deadman.md
new file mode 100644
index 000000000..6f52a49a1
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/monitor/deadman.md
@@ -0,0 +1,46 @@
+---
+title: monitor.deadman() function
+description: >
+ The `monitor.deadman()` function detects when a group stops reporting data.
+menu:
+ v2_0_ref:
+ name: monitor.deadman
+ parent: InfluxDB Monitor
+weight: 202
+cloud_all: true
+---
+
+The `monitor.deadman()` function detects when a group stops reporting data.
+It takes a stream of tables and reports if groups have been observed since time `t`.
+
+_**Function type:** Transformation_
+
+```js
+import "influxdata/influxdb/monitor"
+
+monitor.deadman(t: 2019-08-30T12:30:00Z)
+```
+
+`monitor.deadman()` retains the most recent row from each input table and adds a `dead` column.
+If a record appears **after** time `t`, `monitor.deadman()` sets `dead` to `false`.
+Otherwise, `dead` is set to `true`.
+
+## Parameters
+
+### t
+The time threshold for the deadman check.
+
+_**Data type:** Time_
+
+## Examples
+
+### Detect if a host hasn't reported in the last five minutes
+```js
+import "influxdata/influxdb/monitor"
+import "experimental"
+
+from(bucket: "example-bucket")
+ |> range(start: -10m)
+ |> group(columns: ["host"])
+ |> monitor.deadman(t: experimental.subDuration(d: 5m, from: now() ))
+```
diff --git a/content/v2.0/reference/flux/functions/monitor/from.md b/content/v2.0/reference/flux/functions/monitor/from.md
new file mode 100644
index 000000000..cffde8c9c
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/monitor/from.md
@@ -0,0 +1,69 @@
+---
+title: monitor.from() function
+description: >
+ The `monitor.from()` function retrieves check statuses stored in the `statuses`
+ measurement in the `_monitoring` bucket.
+menu:
+ v2_0_ref:
+ name: monitor.from
+ parent: InfluxDB Monitor
+weight: 202
+---
+
+The `monitor.from()` function retrieves check statuses stored in the `statuses`
+measurement in the `_monitoring` bucket.
+
+_**Function type:** Input_
+
+```js
+import "influxdata/influxdb/monitor"
+
+monitor.from(
+ start: -1h,
+ stop: now(),
+ fn: (r) => true
+)
+```
+
+
+## Parameters
+
+### start
+The earliest time to include in results.
+Use a relative duration or absolute time.
+For example, `-1h` or `2019-08-28T22:00:00Z`.
+Durations are relative to `now()`.
+
+_**Data type:** Duration | Time_
+
+### stop
+The latest time to include in results.
+Use a relative duration or absolute time.
+For example, `-1h` or `2019-08-28T22:00:00Z`.
+Durations are relative to `now()`.
+Defaults to `now()`.
+
+_**Data type:** Duration | Time_
+
+{{% note %}}
+Time values in Flux must be in [RFC3339 format](/v2.0/reference/flux/language/types#timestamp-format).
+{{% /note %}}
+
+### fn
+A single argument predicate function that evaluates `true` or `false`.
+Records or rows (`r`) that evaluate to `true` are included in output tables.
+Records that evaluate to _null_ or `false` are not included in output tables.
+
+_**Data type:** Function_
+
+## Examples
+
+### View critical check statuses from the last hour
+```js
+import "influxdata/influxdb/monitor"
+
+monitor.from(
+ start: -1h,
+ fn: (r) => r._level == "crit"
+)
+```
diff --git a/content/v2.0/reference/flux/functions/monitor/logs.md b/content/v2.0/reference/flux/functions/monitor/logs.md
new file mode 100644
index 000000000..a27b6bc0d
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/monitor/logs.md
@@ -0,0 +1,65 @@
+---
+title: monitor.logs() function
+description: >
+ The `monitor.logs()` function retrieves notification events stored in the `notifications`
+ measurement in the `_monitoring` bucket.
+menu:
+ v2_0_ref:
+ name: monitor.logs
+ parent: InfluxDB Monitor
+weight: 202
+---
+
+The `monitor.logs()` function retrieves notification events stored in the `notifications`
+measurement in the `_monitoring` bucket.
+
+_**Function type:** Input_
+
+```js
+import "influxdata/influxdb/monitor"
+
+monitor.logs(
+ start: -1h,
+ stop: now(),
+ fn: (r) => true
+)
+```
+
+## Parameters
+
+### start
+The earliest time to include in results.
+Use a relative duration or absolute time.
+For example, `-1h` or `2019-08-28T22:00:00Z`.
+Durations are relative to `now()`.
+
+_**Data type:** Duration | Time_
+
+### stop
+The latest time to include in results.
+Use a relative duration or absolute time.
+For example, `-1h` or `2019-08-28T22:00:00Z`.
+Durations are relative to `now()`.
+Defaults to `now()`.
+
+_**Data type:** Duration | Time_
+
+{{% note %}}
+Time values in Flux must be in [RFC3339 format](/v2.0/reference/flux/language/types#timestamp-format).
+{{% /note %}}
+
+### fn
+A single argument predicate function that evaluates `true` or `false`.
+Records or rows (`r`) that evaluate to `true` are included in output tables.
+Records that evaluate to _null_ or `false` are not included in output tables.
+
+_**Data type:** Function_
+
+## Examples
+
+### Query notification events from the last hour
+```js
+import "influxdata/influxdb/monitor"
+
+monitor.logs(start: -1h)
+```
diff --git a/content/v2.0/reference/flux/functions/monitor/notify.md b/content/v2.0/reference/flux/functions/monitor/notify.md
new file mode 100644
index 000000000..5f7dfec22
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/monitor/notify.md
@@ -0,0 +1,52 @@
+---
+title: monitor.notify() function
+description: >
+ The `monitor.notify()` function sends a notification to an endpoint and logs it
+ in the `notifications` measurement in the `_monitoring` bucket.
+menu:
+ v2_0_ref:
+ name: monitor.notify
+ parent: InfluxDB Monitor
+weight: 202
+---
+
+The `monitor.notify()` function sends a notification to an endpoint and logs it
+in the `notifications` measurement in the `_monitoring` bucket.
+
+_**Function type:** Output_
+
+```js
+import "influxdata/influxdb/monitor"
+
+monitor.notify(
+ endpoint: endpoint,
+ data: {}
+)
+```
+
+## Parameters
+
+### endpoint
+A function that constructs and sends the notification to an endpoint.
+
+_**Data type:** Function_
+
+### data
+Data to append to the output.
+**InfluxDB populates notification data.**
+
+_**Data type:** Object_
+
+## Examples
+
+### Send a notification to Slack
+```js
+import "influxdata/influxdb/monitor"
+import "slack"
+
+endpoint = slack.endpoint(name: "slack", channel: "#flux")
+
+from(bucket: "system")
+ |> range(start: -5m)
+ |> monitor.notify(endpoint: endpoint)
+```
diff --git a/content/v2.0/reference/flux/functions/monitor/statechanges.md b/content/v2.0/reference/flux/functions/monitor/statechanges.md
new file mode 100644
index 000000000..fd3b0dc0d
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/monitor/statechanges.md
@@ -0,0 +1,54 @@
+---
+title: monitor.stateChanges() function
+description: >
+ The `monitor.stateChanges()` function detects state changes in a stream of data and
+ outputs records that change from `fromLevel` to `toLevel`.
+menu:
+ v2_0_ref:
+ name: monitor.stateChanges
+ parent: InfluxDB Monitor
+weight: 202
+cloud_all: true
+---
+
+The `monitor.stateChanges()` function detects state changes in a stream of data and
+outputs records that change from `fromLevel` to `toLevel`.
+
+{{% note %}}
+`monitor.stateChanges` operates on data in the `statuses` measurement and requires a `_level` column .
+{{% /note %}}
+
+_**Function type:** Transformation_
+
+```js
+import "influxdata/influxdb/monitor"
+
+monitor.stateChanges(
+ fromLevel: "any",
+ toLevel: "crit"
+)
+```
+
+## Parameters
+
+### fromLevel
+The level to detect a change from.
+Defaults to `"any"`.
+
+_**Data type:** String_
+
+### toLevel
+The level to detect a change to.
+The function output records that change to this level.
+
+_**Data type:** String_
+
+## Examples
+
+### Detect when the state changes to critical
+```js
+import "influxdata/influxdb/monitor"
+
+monitor.from(start: -1h)
+ |> monitor.stateChanges(toLevel: "crit")
+```
diff --git a/content/v2.0/reference/flux/functions/mqtt/_index.md b/content/v2.0/reference/flux/functions/mqtt/_index.md
new file mode 100644
index 000000000..2b53b4519
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/mqtt/_index.md
@@ -0,0 +1,23 @@
+---
+title: Flux MQTT package
+list_title: MQTT package
+description: >
+ The Flux MQTT package provides functions for working with MQTT protocol.
+ Import the `mqtt` package.
+menu:
+ v2_0_ref:
+ name: MQTT
+ parent: Flux packages and functions
+weight: 202
+v2.0/tags: [functions, mqtt, package]
+draft: true
+---
+
+MQTT Flux functions provide tools for working with Message Queuing Telemetry Transport (MQTT) protocol.
+Import the `mqtt` package:
+
+```js
+import "mqtt"
+```
+
+{{< children type="functions" show="pages" >}}
diff --git a/content/v2.0/reference/flux/functions/mqtt/to.md b/content/v2.0/reference/flux/functions/mqtt/to.md
new file mode 100644
index 000000000..e67566895
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/mqtt/to.md
@@ -0,0 +1,130 @@
+---
+title: mqtt.to() function
+description: >
+ The `mqtt.to()` function outputs data to an MQTT broker using MQTT protocol.
+menu:
+ v2_0_ref:
+ name: mqtt.to
+ parent: MQTT
+weight: 202
+draft: true
+---
+
+The `mqtt.to()` function outputs data to an MQTT broker using MQTT protocol.
+
+_**Function type:** Output_
+
+```js
+import "mqtt"
+
+mqtt.to(
+ broker: "tcp://localhost:8883",
+ topic: "example-topic",
+ message: "Example message",
+ qos: 0,
+ clientid: "flux-mqtt",
+ username: "username",
+ password: "password",
+ name: "name-example",
+ timeout: 1s,
+ timeColumn: "_time",
+ tagColumns: ["tag1", "tag2"],
+ valueColumns: ["_value"]
+)
+```
+
+## Parameters
+
+### broker
+The MQTT broker connection string.
+
+_**Data type: String**_
+
+### topic
+The MQTT topic to send data to.
+
+_**Data type: String**_
+
+### message
+The message or payload to send to the MQTT broker.
+The default payload is an output table.
+If there are multiple output tables, it sends each table as a separate MQTT message.
+
+{{% note %}}
+When you specify a message, the function sends the message string only (no output table).
+{{% /note %}}
+
+_**Data type: String**_
+
+### qos
+The [MQTT Quality of Service (QoS)](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901103) level.
+Values range from `[0-2]`.
+Default is `0`.
+
+_**Data type: Integer**_
+
+### clientid
+The MQTT client ID.
+
+_**Data type: String**_
+
+### username
+The username to send to the MQTT broker.
+Username is only required if the broker requires authentication.
+If you provide a username, you must provide a [password](#password).
+
+_**Data type: String**_
+
+### password
+The password to send to the MQTT broker.
+Password is only required if the broker requires authentication.
+If you provide a password, you must provide a [username](#username).
+
+_**Data type: String**_
+
+### name
+_(Optional)_ The name for the MQTT message.
+
+_**Data type: String**_
+
+### timeout
+The MQTT connection timeout.
+Default is `1s`.
+
+_**Data type: Duration**_
+
+### timeColumn
+The column to use as time values in the output line protocol.
+Default is `"_time"`.
+
+_**Data type: String**_
+
+### tagColumns
+The columns to use as tag sets in the output line protocol.
+Default is `[]`.
+
+_**Data type: Array of strings**_
+
+### valueColumns
+The columns to use as field values in the output line protocol.
+Default is `["_value"]`.
+
+_**Data type: Array of strings**_
+
+## Examples
+
+### Send data to an MQTT endpoint
+```js
+import "mqtt"
+
+from(bucket: "example-bucket")
+ |> range(start: -5m)
+ |> filter(fn: (r) => r._measurement == "airSensor")
+ |> mqtt.to(
+ broker: "tcp://localhost:8883",
+ topic: "air-sensors",
+ clientid: "sensor-12a4",
+ tagColumns: ["sensorID"],
+ valueColumns: ["_value"]
+ )
+```
diff --git a/content/v2.0/reference/flux/functions/pagerduty/_index.md b/content/v2.0/reference/flux/functions/pagerduty/_index.md
new file mode 100644
index 000000000..8a8a1fd13
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/pagerduty/_index.md
@@ -0,0 +1,22 @@
+---
+title: Flux PagerDuty package
+list_title: PagerDuty package
+description: >
+ The Flux PagerDuty package provides functions for sending data to PagerDuty.
+ Import the `pagerduty` package.
+menu:
+ v2_0_ref:
+ name: PagerDuty
+ parent: Flux packages and functions
+weight: 202
+v2.0/tags: [functions, pagerduty, package]
+---
+
+The Flux PagerDuty package provides functions for sending data to PagerDuty.
+Import the `pagerduty` package:
+
+```js
+import "pagerduty"
+```
+
+{{< children type="functions" show="pages" >}}
diff --git a/content/v2.0/reference/flux/functions/pagerduty/actionfromseverity.md b/content/v2.0/reference/flux/functions/pagerduty/actionfromseverity.md
new file mode 100644
index 000000000..6ac966f05
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/pagerduty/actionfromseverity.md
@@ -0,0 +1,42 @@
+---
+title: pagerduty.actionFromSeverity() function
+description: >
+ The `pagerduty.actionFromSeverity()` function converts a severity to a PagerDuty action.
+menu:
+ v2_0_ref:
+ name: pagerduty.actionFromSeverity
+ parent: PagerDuty
+weight: 202
+---
+
+The `pagerduty.actionFromSeverity()` function converts a severity to a PagerDuty action.
+`ok` converts to `resolve`.
+All other severities convert to `trigger`.
+
+_**Function type:** Transformation_
+
+```js
+import "pagerduty"
+
+pagerduty.actionFromSeverity(
+ severity: "ok"
+)
+
+// Returns "resolve"
+```
+
+## Parameters
+
+### severity
+The severity to convert to a PagerDuty action.
+
+_**Data type:** String_
+
+## Function definition
+```js
+import "strings"
+
+actionFromSeverity = (severity) =>
+ if strings.toLower(v: severity) == "ok" then "resolve"
+ else "trigger"
+```
diff --git a/content/v2.0/reference/flux/functions/pagerduty/dedupkey.md b/content/v2.0/reference/flux/functions/pagerduty/dedupkey.md
new file mode 100644
index 000000000..a49792e6d
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/pagerduty/dedupkey.md
@@ -0,0 +1,36 @@
+---
+title: pagerduty.dedupKey() function
+description: >
+ The `pagerduty.dedupKey()` function uses the group key of an input table to
+ generate and store a deduplication key in the `_pagerdutyDedupKey` column.
+menu:
+ v2_0_ref:
+ name: pagerduty.dedupKey
+ parent: PagerDuty
+weight: 202
+---
+
+The `pagerduty.dedupKey()` function uses the group key of an input table to
+generate and store a deduplication key in the `_pagerdutyDedupKey` column.
+The function sorts, newline-concatenates, SHA256-hashes, and hex-encodes
+the group key to create a unique deduplication key for each input table.
+
+_**Function type:** Transformation_
+
+```js
+import "pagerduty"
+
+pagerduty.dedupKey()
+```
+
+## Examples
+
+##### Add a PagerDuty deduplication key to output data
+```js
+import "pagerduty"
+
+from(bucket: "default")
+ |> range(start: -5m)
+ |> filter(fn: (r) => r._measurement == "mem")
+ |> pagerduty.dedupKey()
+```
diff --git a/content/v2.0/reference/flux/functions/pagerduty/endpoint.md b/content/v2.0/reference/flux/functions/pagerduty/endpoint.md
new file mode 100644
index 000000000..70fb7cf83
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/pagerduty/endpoint.md
@@ -0,0 +1,73 @@
+---
+title: pagerduty.endpoint() function
+description: >
+ The `pagerduty.endpoint()` function sends a message to PagerDuty that includes output data.
+menu:
+ v2_0_ref:
+ name: pagerduty.endpoint
+ parent: PagerDuty
+weight: 202
+v2.0/tags: [endpoints]
+---
+
+The `pagerduty.endpoint()` function sends a message to PagerDuty that includes output data.
+
+_**Function type:** Output_
+
+```js
+import "pagerduty"
+
+pagerduty.endpoint(
+ url: "https://events.pagerduty.com/v2/enqueue"
+)
+```
+
+## Parameters
+
+### pagerdutyURL
+The PagerDuty API URL.
+Defaults to `https://events.pagerduty.com/v2/enqueue`.
+
+_**Data type:** String_
+
+### mapFn
+A function that builds the object used to generate the POST request.
+
+{{% note %}}
+_You should rarely need to override the default `mapFn` parameter.
+To see the default `mapFn` value or for insight into possible overrides, view the
+[`pagerduty.endpoint()` source code](https://github.com/influxdata/flux/blob/master/stdlib/pagerduty/pagerduty.flux)._
+{{% /note %}}
+
+_**Data type:** Function_
+
+The returned object must include the following fields:
+
+- `routingKey`
+- `client`
+- `client_url`
+- `class`
+- `group`
+- `severity`
+- `component`
+- `source`
+- `summary`
+- `timestamp`
+
+_For more information, see [`pagerduty.message()`](/v2.0/reference/flux/functions/pagerduty/message/)_
+
+## Examples
+
+##### Send critical statuses to a PagerDuty endpoint
+```js
+import "monitor"
+import "pagerduty"
+
+endpoint = pagerduty.endpoint(token: "mySuPerSecRetTokEn")
+
+from(bucket: "example-bucket")
+ |> range(start: -1m)
+ |> filter(fn: (r) => r._measurement == "statuses" and status == "crit")
+ |> map(fn: (r) => { return {r with status: r._status} })
+ |> monitor.notify(endpoint: endpoint)
+```
diff --git a/content/v2.0/reference/flux/functions/pagerduty/sendevent.md b/content/v2.0/reference/flux/functions/pagerduty/sendevent.md
new file mode 100644
index 000000000..a3fb2b7d0
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/pagerduty/sendevent.md
@@ -0,0 +1,129 @@
+---
+title: pagerduty.sendEvent() function
+description: >
+ The `pagerduty.sendEvent()` function sends an event to PagerDuty.
+menu:
+ v2_0_ref:
+ name: pagerduty.sendEvent
+ parent: PagerDuty
+weight: 202
+---
+
+The `pagerduty.sendEvent()` function sends an event to PagerDuty.
+
+_**Function type:** Output_
+
+```js
+import "pagerduty"
+
+pagerduty.sendEvent(
+ pagerdutyURL: "https://events.pagerduty.com/v2/enqueue",
+ routingKey: "ExampleRoutingKey",
+ client: "ExampleClient",
+ clientURL: "http://examplepagerdutyclient.com",
+ dedupkey: "ExampleDedupKey",
+ class: "cpu usage",
+ group: "app-stack",
+ severity: "ok",
+ component: "postgres",
+ source: "monitoringtool:vendor:region",
+ summary: "This is an example summary.",
+ timestamp: "2016-07-17T08:42:58.315+0000"
+)
+```
+
+## Parameters
+
+### pagerdutyURL
+The URL of the PagerDuty endpoint.
+Defaults to `https://events.pagerduty.com/v2/enqueue`.
+
+_**Data type:** String_
+
+### routingKey
+The routing key generated from your PagerDuty integration.
+
+_**Data type:** String_
+
+### client
+The name of the client sending the alert.
+
+_**Data type:** String_
+
+### clientURL
+The URL of the client sending the alert.
+
+_**Data type:** String_
+
+### dedupkey
+A per-alert ID that acts as deduplication key and allows you to acknowledge or
+change the severity of previous messages.
+Supports a maximum of 255 characters.
+
+{{% note %}}
+When using [`pagerduty.endpoint()`](/v2.0/reference/flux/functions/pagerduty/endpoint/)
+to send data to PagerDuty, the function uses the [`pagerduty.dedupKey()` function](/v2.0/reference/flux/functions/pagerduty/dedupkey/) to populate the `dedupkey` parameter.
+{{% /note %}}
+
+_**Data type:** String_
+
+### class
+The class or type of the event.
+Classes are user-defined.
+For example, `ping failure` or `cpu load`.
+
+_**Data type:** String_
+
+### group
+A logical grouping used by PagerDuty.
+Groups are user-defined.
+For example, `app-stack`.
+
+_**Data type:** String_
+
+### severity
+The severity of the event.
+
+**Valid values include:**
+
+- `critical`
+- `error`
+- `warning`
+- `info`
+
+_**Data type:** String_
+
+### eventAction
+The type of event to send to PagerDuty.
+
+**Valid values include:**
+
+- `trigger`
+- `resolve`
+- `acknowledge`
+
+_**Data type:** String_
+
+### component
+The component of the source machine responsible for the event.
+Components are user-defined.
+For example, `mysql` or `eth0`.
+
+_**Data type:** String_
+
+### source
+The unique location of the affected system.
+For example, the hostname or fully qualified domain name (FQDN).
+
+_**Data type:** String_
+
+### summary
+A brief text summary of the event used as the summaries or titles of associated alerts.
+The maximum permitted length is 1024 characters.
+
+_**Data type:** String_
+
+### timestamp
+The time the detected event occurred in [RFC3339nano format](https://golang.org/pkg/time/#RFC3339Nano).
+
+_**Data type:** String_
diff --git a/content/v2.0/reference/flux/functions/pagerduty/severityfromlevel.md b/content/v2.0/reference/flux/functions/pagerduty/severityfromlevel.md
new file mode 100644
index 000000000..a70fd76b6
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/pagerduty/severityfromlevel.md
@@ -0,0 +1,55 @@
+---
+title: pagerduty.severityFromLevel() function
+description: >
+ The `pagerduty.severityFromLevel()` function converts an InfluxDB status level to
+ a PagerDuty severity.
+menu:
+ v2_0_ref:
+ name: pagerduty.severityFromLevel
+ parent: PagerDuty
+weight: 202
+---
+
+The `pagerduty.severityFromLevel()` function converts an InfluxDB status level to
+a PagerDuty severity.
+
+_**Function type:** Transformation_
+
+```js
+import "pagerduty"
+
+pagerduty.severityFromLevel(
+ level: "crit"
+)
+
+// Returns "critical"
+```
+
+| Status level | PagerDuty severity |
+|:------------:|:------------------:|
+| `crit` | `critical` |
+| `warn` | `warning` |
+| `info` | `info` |
+| `ok` | `info` |
+
+## Parameters
+
+### level
+The InfluxDB status level to convert to a PagerDuty severity.
+
+_**Data type:** String_
+
+## Function definition
+```js
+import "strings"
+
+severityFromLevel = (level) => {
+ lvl = strings.toLower(v:level)
+ sev = if lvl == "warn" then "warning"
+ else if lvl == "crit" then "critical"
+ else if lvl == "info" then "info"
+ else if lvl == "ok" then "info"
+ else "error"
+ return sev
+}
+```
diff --git a/content/v2.0/reference/flux/functions/secrets/_index.md b/content/v2.0/reference/flux/functions/secrets/_index.md
new file mode 100644
index 000000000..d27834ccf
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/secrets/_index.md
@@ -0,0 +1,22 @@
+---
+title: Flux InfluxDB Secrets package
+list_title: InfluxDB Secrets package
+description: >
+ The Flux InfluxDB Secrets package provides functions for working with sensitive secrets managed by InfluxDB.
+ Import the `influxdata/influxdb/secrets` package.
+menu:
+ v2_0_ref:
+ name: InfluxDB Secrets
+ parent: Flux packages and functions
+weight: 202
+v2.0/tags: [functions, secrets, package]
+---
+
+InfluxDB Secrets Flux functions provide tools for working with sensitive secrets managed by InfluxDB.
+Import the `influxdata/influxdb/secrets` package:
+
+```js
+import "influxdata/influxdb/secrets"
+```
+
+{{< children type="functions" show="pages" >}}
diff --git a/content/v2.0/reference/flux/functions/secrets/get.md b/content/v2.0/reference/flux/functions/secrets/get.md
new file mode 100644
index 000000000..342e6d380
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/secrets/get.md
@@ -0,0 +1,45 @@
+---
+title: secrets.get() function
+description: >
+ The `secrets.get()` function retrieves a secret from the InfluxDB secret store.
+menu:
+ v2_0_ref:
+ name: secrets.get
+ parent: InfluxDB Secrets
+weight: 202
+---
+
+The `secrets.get()` function retrieves a secret from the
+[InfluxDB secret store](/v2.0/security/secrets/).
+
+_**Function type:** Miscellaneous_
+
+```js
+import "influxdata/influxdb/secrets"
+
+secrets.get(key: "KEY_NAME")
+```
+
+## Parameters
+
+### key
+The secret key to retrieve.
+
+_**Data type:** String_
+
+## Examples
+
+### Populate sensitive credentials with secrets
+```js
+import "sql"
+import "influxdata/influxdb/secrets"
+
+username = secrets.get(key: "POSTGRES_USERNAME")
+password = secrets.get(key: "POSTGRES_PASSWORD")
+
+sql.from(
+ driverName: "postgres",
+ dataSourceName: "postgresql://${username}:${password}@localhost",
+ query:"SELECT * FROM example-table"
+)
+```
diff --git a/content/v2.0/reference/flux/functions/slack/_index.md b/content/v2.0/reference/flux/functions/slack/_index.md
new file mode 100644
index 000000000..82e48c738
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/slack/_index.md
@@ -0,0 +1,22 @@
+---
+title: Flux Slack package
+list_title: Slack package
+description: >
+ The Flux Slack package provides functions for sending data to Slack.
+ Import the `slack` package.
+menu:
+ v2_0_ref:
+ name: Slack
+ parent: Flux packages and functions
+weight: 202
+v2.0/tags: [functions, slack, package]
+---
+
+The Flux Slack package provides functions for sending data to Slack.
+Import the `slack` package:
+
+```js
+import "slack"
+```
+
+{{< children type="functions" show="pages" >}}
diff --git a/content/v2.0/reference/flux/functions/slack/endpoint.md b/content/v2.0/reference/flux/functions/slack/endpoint.md
new file mode 100644
index 000000000..a4940de1a
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/slack/endpoint.md
@@ -0,0 +1,86 @@
+---
+title: slack.endpoint() function
+description: >
+ The `slack.endpoint()` function sends a message to Slack that includes output data.
+menu:
+ v2_0_ref:
+ name: slack.endpoint
+ parent: Slack
+weight: 202
+v2.0/tags: [endpoints]
+---
+
+The `slack.endpoint()` function sends a message to Slack that includes output data.
+
+_**Function type:** Output_
+
+```js
+import "slack"
+
+slack.endpoint(
+ url: "https://slack.com/api/chat.postMessage",
+ token: "mySuPerSecRetTokEn"
+)
+```
+
+## Parameters
+
+### url
+The Slack API URL.
+Defaults to `https://slack.com/api/chat.postMessage`.
+
+{{% note %}}
+If using a Slack webhook, you'll receive a Slack webhook URL when you
+[create an incoming webhook](https://api.slack.com/incoming-webhooks#create_a_webhook).
+{{% /note %}}
+
+_**Data type:** String_
+
+### token
+The [Slack API token](https://get.slack.help/hc/en-us/articles/215770388-Create-and-regenerate-API-tokens)
+used to interact with Slack.
+Defaults to `""`.
+
+{{% note %}}
+A token is only required if using the Slack chat.postMessage API.
+{{% /note %}}
+
+_**Data type:** String_
+
+### mapFn
+A function that builds the object used to generate the POST request.
+
+{{% note %}}
+_You should rarely need to override the default `mapFn` parameter.
+To see the default `mapFn` value or for insight into possible overrides, view the
+[`slack.endpoint()` source code](https://github.com/influxdata/flux/blob/master/stdlib/slack/slack.flux)._
+{{% /note %}}
+
+_**Data type:** Function_
+
+The returned object must include the following fields:
+
+- `username`
+- `channel`
+- `workspace`
+- `text`
+- `iconEmoji`
+- `color`
+
+_For more information, see [`slack.message()`](/v2.0/reference/flux/functions/slack/message/)_
+
+## Examples
+
+##### Send critical statuses to a Slack endpoint
+```js
+import "monitor"
+import "slack"
+
+endpoint = slack.endpoint(token: "mySuPerSecRetTokEn")
+
+from(bucket: "example-bucket")
+ |> range(start: -1m)
+ |> filter(fn: (r) => r._measurement == "statuses" and status == "crit")
+ |> map(fn: (r) => { return {r with status: r._status} })
+ |> monitor.notify(endpoint: endpoint)
+```
diff --git a/content/v2.0/reference/flux/functions/slack/message.md b/content/v2.0/reference/flux/functions/slack/message.md
new file mode 100644
index 000000000..70606b866
--- /dev/null
+++ b/content/v2.0/reference/flux/functions/slack/message.md
@@ -0,0 +1,124 @@
+---
+title: slack.message() function
+description: >
+ The `slack.message()` function sends a single message to a Slack channel.
+ The function works with either with the chat.postMessage API or with a Slack webhook.
+menu:
+ v2_0_ref:
+ name: slack.message
+ parent: Slack
+weight: 202
+---
+
+The `slack.message()` function sends a single message to a Slack channel.
+The function works with either with the [chat.postMessage API](https://api.slack.com/methods/chat.postMessage)
+or with a [Slack webhook](https://api.slack.com/incoming-webhooks).
+
+_**Function type:** Output_
+
+```js
+import "slack"
+
+slack.message(
+ url: "https://slack.com/api/chat.postMessage",
+ token: "mySuPerSecRetTokEn",
+ username: "Fluxtastic",
+ channel: "#flux",
+ workspace: "",
+ text: "This is a message from the Flux slack.message() function.",
+ iconEmoji: "wave",
+ color: "good"
+)
+```
+
+## Parameters
+
+### url
+The Slack API URL.
+Defaults to `https://slack.com/api/chat.postMessage`.
+
+{{% note %}}
+If using a Slack webhook, you'll receive a Slack webhook URL when you
+[create an incoming webhook](https://api.slack.com/incoming-webhooks#create_a_webhook).
+{{% /note %}}
+
+_**Data type:** String_
+
+### token
+The [Slack API token](https://get.slack.help/hc/en-us/articles/215770388-Create-and-regenerate-API-tokens)
+used to interact with Slack.
+Defaults to `""`.
+
+{{% note %}}
+A token is only required if using the Slack chat.postMessage API.
+{{% /note %}}
+
+_**Data type:** String_
+
+### username
+The username to use when posting the message to a Slack channel. Required
+
+_**Data type:** String_
+
+### channel
+The name of channel to post the message to. Required
+
+_**Data type:** String_
+
+### workspace
+The name of the Slack workspace to use if there are multiple.
+Defaults to `""`.
+
+_**Data type:** String_
+
+### text
+The text to display in the Slack message. Required
+
+_**Data type:** String_
+
+### iconEmoji
+The name of emoji to use as the user avatar when posting the message to Slack.
+Required
+
+_**Data type:** String_
+
+{{% note %}}
+#### Things to know about iconEmoji
+- **Do not** enclose the name in colons `:` as you do in the Slack client.
+- `iconEmoji` only appears as the user avatar when using the Slack chat.postMessage API.
+{{% /note %}}
+
+### color
+The color to include with the message.
+Required
+
+**Valid values include:**
+
+- `good`
+- `warning`
+- `danger`
+- Any valid RGB hex color code. For example, `#439FE0`.
+
+_**Data type:** String_
+
+## Examples
+
+##### Send the last reported status to Slack
+```js
+import "slack"
+
+lastReported =
+ from(bucket: "example-bucket")
+ |> range(start: -1m)
+ |> filter(fn: (r) => r._measurement == "statuses")
+ |> last()
+ |> map(fn: (r) => { return {status: r._status} })
+
+slack.message(
+ url: "https://slack.com/api/chat.postMessage",
+ token: "mySuPerSecRetTokEn",
+ username: "johndoe",
+ channel: "#system-status",
+ text: "The last reported status was \"${lastReported.status}\"."
+)
+```
diff --git a/content/v2.0/reference/flux/language/assignment-scope.md b/content/v2.0/reference/flux/language/assignment-scope.md
index 99e03231a..2b20f7ce8 100644
--- a/content/v2.0/reference/flux/language/assignment-scope.md
+++ b/content/v2.0/reference/flux/language/assignment-scope.md
@@ -8,12 +8,6 @@ menu:
weight: 202
---
-{{% note %}}
-This document is a living document and may not represent the current implementation of Flux.
-Any section that is not currently implemented is commented with a **[IMPL#XXX]** where
-**XXX** is an issue number tracking discussion and progress towards implementation.
-{{% /note %}}
-
An assignment binds an identifier to a variable, option, or function.
Every identifier in a program must be assigned.
@@ -32,10 +26,6 @@ Note that the package clause is not an assignment.
The package name does not appear in any scope.
Its purpose is to identify the files belonging to the same package and to specify the default package name for import declarations.
-{{% note %}}
-[IMPL#247](https://github.com/influxdata/platform/issues/247) Add package/namespace support.
-{{% /note %}}
-
## Variable assignment
A variable assignment creates a variable bound to an identifier and gives it a type and value.
A variable keeps the same type and value for the remainder of its lifetime.
diff --git a/content/v2.0/reference/flux/language/expressions.md b/content/v2.0/reference/flux/language/expressions.md
index 28392fb47..1dc60a210 100644
--- a/content/v2.0/reference/flux/language/expressions.md
+++ b/content/v2.0/reference/flux/language/expressions.md
@@ -269,4 +269,8 @@ PostfixOperator = MemberExpression
| IndexExpression .
```
+{{% warn %}}
+Dividing by 0 or using the mod operator with a divisor of 0 will result in an error.
+{{% /warn %}}
+
_Also see [Flux Operators](/v2.0/reference/flux/language/operators)._
diff --git a/content/v2.0/reference/flux/language/lexical-elements.md b/content/v2.0/reference/flux/language/lexical-elements.md
index ee588967b..c39f9f7b6 100644
--- a/content/v2.0/reference/flux/language/lexical-elements.md
+++ b/content/v2.0/reference/flux/language/lexical-elements.md
@@ -269,8 +269,7 @@ String literals support several escape sequences.
\t U+0009 horizontal tab
\" U+0022 double quote
\\ U+005C backslash
-\{ U+007B open curly bracket
-\} U+007D close curly bracket
+\${ U+0024 U+007B dollar sign and opening curly bracket
```
Additionally, any byte value may be specified via a hex encoding using `\x` as the prefix.
@@ -281,15 +280,9 @@ byte_value = `\` "x" hex_digit hex_digit .
hex_digit = "0" … "9" | "A" … "F" | "a" … "f" .
unicode_value = unicode_char | escaped_char .
escaped_char = `\` ( "n" | "r" | "t" | `\` | `"` ) .
-StringExpression = "{" Expression "}" .
+StringExpression = "${" Expression "}" .
```
-{{% note %}}
-To be added: TODO: With string interpolation `string_lit` is not longer a lexical token as part of a literal, but an entire expression in and of itself.
-
-[IMPL#252](https://github.com/influxdata/platform/issues/252) Parse string literals.
-{{% /note %}}
-
##### Examples of string literals
```js
@@ -301,12 +294,12 @@ To be added: TODO: With string interpolation `string_lit` is not longer a lexica
```
String literals are also interpolated for embedded expressions to be evaluated as strings.
-Embedded expressions are enclosed in curly brackets (`{}`).
+Embedded expressions are enclosed in a dollar sign and curly braces (`${}`).
The expressions are evaluated in the scope containing the string literal.
-The result of an expression is formatted as a string and replaces the string content between the brackets.
+The result of an expression is formatted as a string and replaces the string content between the braces.
All types are formatted as strings according to their literal representation.
A function `printf` exists to allow more precise control over formatting of various types.
-To include the literal curly brackets within a string they must be escaped.
+To include the literal `${` within a string, it must be escaped.
{{% note %}}
[IMPL#248](https://github.com/influxdata/platform/issues/248) Add printf function.
@@ -316,14 +309,13 @@ To include the literal curly brackets within a string they must be escaped.
```js
n = 42
-"the answer is {n}" // the answer is 42
-"the answer is not {n+1}" // the answer is not 43
-"openinng curly bracket \{" // openinng curly bracket {
-"closing curly bracket \}" // closing curly bracket }
+"the answer is ${n}" // the answer is 42
+"the answer is not ${n+1}" // the answer is not 43
+"dollar sign opening curly bracket \${" // dollar sign opening curly bracket ${
```
{{% note %}}
-[IMPL#251](https://github.com/influxdata/platform/issues/251) Add string interpolation support
+[IMPL#1775](https://github.com/influxdata/flux/issues/1775) Interpolate arbitrary expressions in string literals
{{% /note %}}
### Regular expression literals
diff --git a/content/v2.0/reference/flux/language/packages.md b/content/v2.0/reference/flux/language/packages.md
index ce7d0f459..a04d6173c 100644
--- a/content/v2.0/reference/flux/language/packages.md
+++ b/content/v2.0/reference/flux/language/packages.md
@@ -13,12 +13,6 @@ menu:
weight: 207
---
-{{% note %}}
-This document is a living document and may not represent the current implementation of Flux.
-Any section that is not currently implemented is commented with a **[IMPL#XXX]** where
-**XXX** is an issue number tracking discussion and progress towards implementation.
-{{% /note %}}
-
Flux source is organized into packages.
A package consists of one or more source files.
Each source file is parsed individually and composed into a single package.
@@ -41,10 +35,6 @@ All files in the same package must declare the same package name.
When a file does not declare a package clause, all identifiers in that
file will belong to the special `main` package.
-{{% note %}}
-[IMPL#247](https://github.com/influxdata/platform/issues/247) Add package/namespace support.
-{{% /note %}}
-
### Package main
The `main` package is special for a few reasons:
diff --git a/content/v2.0/reference/flux/language/statements.md b/content/v2.0/reference/flux/language/statements.md
index 5ae6b94c0..e3335228b 100644
--- a/content/v2.0/reference/flux/language/statements.md
+++ b/content/v2.0/reference/flux/language/statements.md
@@ -119,6 +119,7 @@ duration // duration of time
time // time
string // utf-8 encoded string
regexp // regular expression
+bytes // sequence of byte values
type // a type that itself describes a type
```
diff --git a/content/v2.0/reference/flux/language/string-interpolation.md b/content/v2.0/reference/flux/language/string-interpolation.md
new file mode 100644
index 000000000..463233ae4
--- /dev/null
+++ b/content/v2.0/reference/flux/language/string-interpolation.md
@@ -0,0 +1,96 @@
+---
+title: String interpolation
+description: >
+ Flux string interpolation evaluates string literals containing one or more placeholders
+ and returns a result with placeholders replaced with their corresponding values.
+menu:
+ v2_0_ref:
+ parent: Flux specification
+ name: String interpolation
+weight: 211
+---
+
+Flux string interpolation evaluates string literals containing one or more placeholders
+and returns a result with placeholders replaced with their corresponding values.
+
+## String interpolation syntax
+To use Flux string interpolation, enclose embedded [expressions](/v2.0/reference/flux/language/expressions/)
+in a dollar sign and curly braces `${}`.
+Flux replaces the content between the braces with the result of the expression and
+returns a string literal.
+
+```js
+name = "John"
+
+"My name is ${name}."
+
+// My name is John.
+```
+
+{{% note %}}
+#### Flux only interpolates string values
+Flux currently interpolates only string values ([IMP#1775](https://github.com/influxdata/flux/issues/1775)).
+Use the [string() function](/v2.0/reference/flux/functions/built-in/transformations/type-conversions/string/)
+to convert non-string values to strings.
+
+```js
+count = 12
+
+"I currently have ${string(v: count)} cats."
+```
+{{% /note %}}
+
+
+## Use dot notation to interpolate object values
+[Objects](/v2.0/reference/flux/language/expressions/#object-literals) consist of key-value pairs.
+Use [dot notation](/v2.0/reference/flux/language/expressions/#member-expressions)
+to interpolate values from an object.
+
+```js
+person = {
+ name: "John",
+ age: 42
+}
+
+"My name is ${person.name} and I'm ${string(v: person.age)} years old."
+
+// My name is John and I'm 42 years old.
+```
+
+Flux returns each record in query results as an object.
+In Flux row functions, each row object is represented by `r`.
+Use dot notation to interpolate specific column values from the `r` object.
+
+##### Use string interpolation to add a human-readable message
+```js
+from(bucket: "example-bucket")
+ |> range(start: -30m)
+ |> map(fn: (r) => ({
+ r with
+ human-readable: "${r._field} is ${r._value} at ${string(v: r._time)}."
+ }))
+```
+
+## String interpolation versus concatenation
+Flux supports both string interpolation and string concatenation.
+String interpolation is a more concise method for achieving the same result.
+
+```js
+person = {
+ name: "John",
+ age: 42
+}
+
+// String interpolation
+"My name is ${person.name} and I'm ${string(v: person.age)} years old."
+
+// String concatenation
+"My name is " + person.name + " and I'm " + string(v: person.age) + " years old."
+
+// Both return: My name is John and I'm 42 years old.
+```
+
+{{% note %}}
+Check and notification message templates configured in the InfluxDB user interface
+**do not** support string concatenation.
+{{% /note %}}
diff --git a/content/v2.0/reference/flux/language/types.md b/content/v2.0/reference/flux/language/types.md
index 486140d6c..495e6450a 100644
--- a/content/v2.0/reference/flux/language/types.md
+++ b/content/v2.0/reference/flux/language/types.md
@@ -105,7 +105,12 @@ The string type is nullable.
An empty string is **not** a _null_ value.
{{% /note %}}
-The length of a string is its size in bytes, not the number of characters, since a single character may be multiple bytes.
+The length of a string is its size in bytes, not the number of characters,
+since a single character may be multiple bytes.
+
+### Bytes types
+A _bytes type_ represents a sequence of byte values.
+The bytes type name is `bytes`.
## Regular expression types
A _regular expression type_ represents the set of all patterns for regular expressions.
diff --git a/content/v2.0/reference/glossary.md b/content/v2.0/reference/glossary.md
index b9be8986e..1111627d2 100644
--- a/content/v2.0/reference/glossary.md
+++ b/content/v2.0/reference/glossary.md
@@ -92,6 +92,32 @@ A bucket is a named location where time series data is stored. All buckets have
## C
+### check
+
+Checks are part of queries used in monitoring to read input data and assign a [status](#check-status) (`_level`) based on specified conditions. For example:
+
+```
+monitor.check(
+ crit: (r) => r._value > 90.0,
+ warn: (r) => r._value > 80.0,
+ info: (r) => r._value > 60.0,
+ ok: (r) => r._value <= 20.0,
+ messageFn: (r) => "The current level is ${r._level}",
+)
+```
+
+This check gives rows with a `_value` greater than 90.0 a crit _level; rows greater than 80.0 get a warn _level, and so on.
+
+Learn how to [create a check](/v2.0/cloud/monitor-alert/manage-checks/create-checks).
+
+Related entries: [check status](#check-status), [notification rule](#notification-rule), [notification endpoint](#notification-endpoint)
+
+### check status
+
+A [check](#check) gets one of the following statuses (`_level`): CRIT, INFO, WARN, or OK. Check statuses are written to a status measurement in the _monitoring bucket.
+
+Related entries: [check](#check), [notification rule](#notification-rule), [notification endpoint](#notification-endpoint)
+
### CSV
Comma-separated values (CSV) delimits text between commas to separate values. A CSV file stores tabular data (numbers and text) in plain text. Each line of the file is a data record. Each record consists of one or more fields, separated by commas. CSV file format is not fully standardized.
@@ -523,6 +549,20 @@ An independent `influxd` process.
Related entries: [server](#server)
+### notification endpoint
+
+ The notification endpoint specifies the Slack or PagerDuty endpoint to send a notification and contains configuration details for connecting to the endpoint. Learn how to [create a notification endpoint](/v2.0/monitor-alert/notification-endpoints/create).
+
+Related entries: [check](#check), [notification rule](#notification-rule)
+
+### notification rule
+
+A notification rule specifies a status level (and tags) to alert on, the notification message to send for the specified status level (or change in status level), and the interval or schedule you want to check the status level (and tags). If conditions are met, the notification rule sends a message to the [notification endpoint](#notification-endpoint) and stores a receipt in a notification measurement in the _monitoring bucket. For example, a notification rule may specify a message to send to a Slack endpoint when a status level is critical (`crit`).
+
+Learn how to [create a notification rule](/v2.0/monitor-alert/notification-rules/create).
+
+Related entries: [check](#check), [notification endpoint](#notification-endpoint)
+
### now()
The local server's nanosecond timestamp.
@@ -617,7 +657,7 @@ Collect data from any accessible endpoint that provides data in the [Prometheus
### query
-An operation that retrieves data from InfluxDB.
+A Flux script that returns time series data, including [tags](#tag) and [timestamps](#timestamp).
See [Query data in InfluxDB](/v2.0/query-data/).
diff --git a/content/v2.0/reference/release-notes/flux.md b/content/v2.0/reference/release-notes/flux.md
index 06c1aaeec..8d5d09809 100644
--- a/content/v2.0/reference/release-notes/flux.md
+++ b/content/v2.0/reference/release-notes/flux.md
@@ -11,16 +11,137 @@ aliases:
---
{{% note %}}
-_The latest release of InfluxDB v2.0 alpha includes **Flux v0.39.0**.
+_The latest release of InfluxDB v2.0 alpha includes **Flux v0.45.1**.
Though newer versions of Flux may be available, they will not be included with
InfluxDB until the next InfluxDB v2.0 release._
{{% /note %}}
---
+## v0.45.1 [2019-09-09]
+
+### Bug fixes
+- Ensure `http.post` respects the context.
+
+---
+
+## v0.45.0 [2019-09-06]
+
+### Features
+- Added Google Bigtable `from()`.
+
+### Bug fixes
+- Add `pagerduty.severityFromLevel()` helper function.
+- Sleep function now gets canceled when the context is canceled.
+- Categorize the undefined identifier as an invalid status code.
+- Panic from `CheckKind` in `memberEvaluator`.
+
+---
+
+## v0.44.0 [2019-09-05]
+
+### Features
+- Add `http.basicAuth` function.
+- Add measurement filters to `monitor.from` and `monitor.logs`.
+
+### Bug fixes
+- changed the default HTTP client to be more robust.
+
+---
+
+## v0.43.0 [2019-09-04]
+
+### Features
+- PagerDuty endpoint for alerts and notifications.
+
+---
+
+## v0.42.0 [2019-08-30]
+
+### Features
+- Add `stateChanges` function.
+
+### Bug fixes
+- Race condition in looking up types in `map`.
+- Support bool equality expressions.
+- Calculating a type variable's free type variables.
+- Do not generate fresh type variables for member expressions.
+- Array instantiation.
+
+---
+
+## v0.41.0 [2019-08-26]
+
+### Features
+- Add ability to validate URLs before making `http.post` requests.
+- Evaluate string interpolation.
+- Implement the `secrets.get` function.
+- Added secret service interface.
+- Add secrets package that will construct a secret object.
+- Added a SecretService interface and a new dependencies package and a basic test of functionality.
+- Add Slack endpoint.
+
+### Bug fixes
+- Make `reset()` check for non-nil data before calling `Release()`.
+- Add test case for `notify` function.
+- Add missing math import to test case.
+- Make packages aware of options.
+- Resolved `holtWinters` panic.
+- Use non-pointer receiver for `interpreter.function`.
+
+---
+
+## v0.40.2 [2019-08-22]
+
+### Bug fixes
+- Resolved `holtWinters()` panic.
+
+---
+
+## v0.40.1 [2019-08-21]
+
+### Bug fixes
+- Use non-pointer receiver for `interpreter.function`.
+
+---
+
+## v0.40.0 [2019-08-20]
+
+### Breaking changes
+- Update compiler package to use true scope.
+- Add `http` and `json` to prelude.
+
+### Features
+- Add `alerts.check()` function.
+- Add `alerts.notify` function.
+- Add `kaufmansER()` and `kaufmansAMA()` functions.
+- Add `experimental.to()` function.
+- Add `experimental.set()` function to update entire object.
+- Add `experimental.objectKeys()` function.
+- Add `tripleExponentialDerivative()` function.
+- Add `json.encode()` function.
+- Add `mqtt.to()` function.
+- Add Bytes type.
+- Update compiler package to use true scope.
+- Add http endpoint.
+- Add post method implementation.
+- String interpolation.
+
+### Bug fixes
+- Avoid wrapping table errors in the CSV encoder.
+- Remove irrelevant TODOs.
+- `mode()` now properly considers nulls when calculating the mode.
+- Add `http` and `json` to prelude.
+- Rename all Flux test files to use `_test.flux`.
+
+---
+
## v0.39.0 [2019-08-13]
-> A queryd panic has been reported in `HoltWinters()`. We're working to resolve this issue as soon as possible.
+{{% warn %}}
+In Flux 0.39.0, `holtWinters()` can cause the query engine to panic.
+**Flux 0.40.2 resolves this panic.**
+{{% /warn %}}
### Breaking changes
- Implement the scanning components for string expressions.
diff --git a/content/v2.0/security/secrets/_index.md b/content/v2.0/security/secrets/_index.md
new file mode 100644
index 000000000..dba43f9a8
--- /dev/null
+++ b/content/v2.0/security/secrets/_index.md
@@ -0,0 +1,36 @@
+---
+title: Store and use secrets
+description:
+v2.0/tags: [secrets, security]
+menu:
+ v2_0:
+ parent: Security & authorization
+weight: 102
+---
+
+There are two options for storing secrets with InfluxDB:
+
+- By default, secrets are Base64-encoded and stored in the InfluxDB embedded key value store, [BoltDB](https://github.com/boltdb/bolt).
+- You can also set up Vault to store secrets. For details, see [Store secrets in Vault](/v2.0/security/secrets/use-vault).
+
+## Use secrets in a query
+Import the `influxdata/influxd/secrets` package and use the `secrets.get()` function
+to populate sensitive data in queries with secrets from your secret store.
+
+```js
+import "influxdata/influxdb/secrets"
+import "sql"
+
+username = secrets.get(key: "POSTGRES_USERNAME")
+password = secrets.get(key: "POSTGRES_PASSWORD")
+
+sql.from(
+ driverName: "postgres",
+ dataSourceName: "postgresql://${username}:${password}@localhost",
+ query:"SELECT * FROM example-table"
+)
+```
+
+## Add, list, and delete secrets
+
+See [Manage secrets](/v2.0/security/secrets/manage-secrets).
diff --git a/content/v2.0/security/secrets/manage-secrets.md b/content/v2.0/security/secrets/manage-secrets.md
new file mode 100644
index 000000000..9b4054267
--- /dev/null
+++ b/content/v2.0/security/secrets/manage-secrets.md
@@ -0,0 +1,69 @@
+---
+title: Manage secrets
+description: Manage secrets in InfluxDB with the InfluxDB API.
+v2.0/tags: [secrets, security]
+menu:
+ v2_0:
+ parent: Store and use secrets
+weight: 201
+---
+
+
+Manage secrets using the InfluxDB `/org/{orgID}/secrets` API endpoint.
+All secrets belong to an organization and are stored in your [secret-store](/v2.0/security/secrets/).
+Include your [organization ID](/v2.0/organizations/view-orgs/#view-your-organization-id)
+and [authentication token](/v2.0/security/tokens/view-tokens/) with each request.
+
+### Add a secret
+Use the `PATCH` request method to add a new secret to your organization.
+Pass the secret key-value pair in the request body.
+
+```sh
+curl -XPATCH http://localhost:9999/api/v2/orgs//secrets \
+ -H 'authorization: Token YOURAUTHTOKEN' \
+ -H 'Content-type: application/json' \
+ --data '{
+ "": ""
+}'
+```
+
+### View secret keys
+Use the `GET` request method to view your organization's secrets keys.
+
+```sh
+curl -XGET http://localhost:9999/api/v2/orgs//secrets \
+ -H 'authorization: Token YOURAUTHTOKEN'
+```
+
+### Delete a secret
+Use the `POST` request method and the `orgs/{orgID}/secrets/delete` API endpoint
+to delete one or more secrets.
+Include an array of secret keys to delete in the requests body in the following format.
+
+```bash
+curl -XGET http://localhost:9999/api/v2/orgs//secrets/delete \
+ --H 'authorization: Token YOURAUTHTOKEN'
+ --data '{
+ "secrets": [
+ ""
+ ]
+}'
+```
+
+## Use secrets in a query
+Import the `influxdata/influxd/secrets` package and use the `secrets.get()` function
+to populate sensitive data in queries with secrets from your secret store.
+
+```js
+import "influxdata/influxdb/secrets"
+import "sql"
+
+username = secrets.get(key: "POSTGRES_USERNAME")
+password = secrets.get(key: "POSTGRES_PASSWORD")
+
+sql.from(
+ driverName: "postgres",
+ dataSourceName: "postgresql://${username}:${password}@localhost",
+ query:"SELECT * FROM example-table"
+)
+```
diff --git a/content/v2.0/security/secrets/use-vault.md b/content/v2.0/security/secrets/use-vault.md
new file mode 100644
index 000000000..7b7ca9934
--- /dev/null
+++ b/content/v2.0/security/secrets/use-vault.md
@@ -0,0 +1,68 @@
+---
+title: Store secrets in Vault
+description: Manage secrets in InfluxDB using the InfluxDB UI or the influx CLI.
+v2.0/tags: [secrets, security]
+menu:
+ v2_0:
+ parent: Store and use secrets
+weight: 201
+---
+
+[Vault](https://www.vaultproject.io/) secures, stores, and tightly controls access
+to tokens, passwords, certificates, and other sensitive secrets.
+Store sensitive secrets in Vault using the InfluxDB built-in Vault integration.
+
+## Start a Vault server
+
+Start a Vault server and ensure InfluxDB has network access to the server.
+
+The following links provide information about running Vault in both development and production:
+
+- [Install Vault](https://learn.hashicorp.com/vault/getting-started/install)
+- [Start a Vault dev server](https://learn.hashicorp.com/vault/getting-started/dev-server)
+- [Deploy Vault](https://learn.hashicorp.com/vault/getting-started/deploy)
+
+{{% note %}}
+InfluxDB supports the [Vault KV Secrets Engine Version 2 API](https://www.vaultproject.io/api/secret/kv/kv-v2.html) only.
+When you create a secrets engine, enable the `kv-v2` version by running:
+
+```js
+vault secrets enable kv-v2
+```
+{{% /note %}}
+
+For this example, install Vault on your local machine and start a Vault dev server.
+
+```sh
+vault server -dev
+```
+
+## Define Vault environment variables
+
+Use [Vault environment variables](https://www.vaultproject.io/docs/commands/index.html#environment-variables)
+to provide connection credentials and other important Vault-related information to InfluxDB.
+
+#### Required environment variables
+
+- `VAULT_ADDR`: The API address of your Vault server _(provided in the Vault server output)_.
+- `VAULT_TOKEN`: The [Vault token](https://learn.hashicorp.com/vault/getting-started/authentication)
+ required to access your Vault server.
+
+_Your Vault server configuration may require other environment variables._
+
+```sh
+export VAULT_ADDR='http://127.0.0.1:8200' VAULT_TOKEN='s.0X0XxXXx0xXxXXxxxXxXxX0x'
+```
+
+## Start InfluxDB
+
+Start the [`influxd` service](/v2.0/reference/cli/influxd/) with the `--secret-store`
+option set to `vault`.
+
+```bash
+influxd --secret-store vault
+```
+
+## Manage tokens through the InfluxDB API
+Use the InfluxDB `/org/{orgID}/secrets` API endpoint to add tokens to Vault.
+For details, see [Manage secrets](/v2.0/security/secrets/manage-secrets/).
diff --git a/content/v2.0/security/tokens/create-token.md b/content/v2.0/security/tokens/create-token.md
index d364d99bd..0352c5a6c 100644
--- a/content/v2.0/security/tokens/create-token.md
+++ b/content/v2.0/security/tokens/create-token.md
@@ -16,9 +16,9 @@ command line interface (CLI).
## Create a token in the InfluxDB UI
-1. Click the **Settings** icon in the navigation bar.
+1. Click the **Load Data** icon in the navigation bar.
- {{< nav-icon "settings" >}}
+ {{< nav-icon "disks" >}}
2. Click **Tokens**.
3. Click the **+ Generate** dropdown in the upper right and select a token type (**Read/Write Token** or **All Access Token**).
diff --git a/content/v2.0/security/tokens/delete-token.md b/content/v2.0/security/tokens/delete-token.md
index 13083063a..b96e308af 100644
--- a/content/v2.0/security/tokens/delete-token.md
+++ b/content/v2.0/security/tokens/delete-token.md
@@ -17,9 +17,9 @@ have access to your InfluxDB instance.
## Delete tokens in the InfluxDB UI
-1. Click the **Settings** icon in the navigation bar.
+1. Click the Click the **Load Data** icon in the navigation bar.
- {{< nav-icon "settings" >}}
+ {{< nav-icon "disks" >}}
2. Click **Tokens**. All of your account's tokens appear.
3. Hover over the token you want to delete and click **Delete** and **Confirm**.
diff --git a/content/v2.0/security/tokens/update-tokens.md b/content/v2.0/security/tokens/update-tokens.md
index eb1b86533..b566c8809 100644
--- a/content/v2.0/security/tokens/update-tokens.md
+++ b/content/v2.0/security/tokens/update-tokens.md
@@ -15,9 +15,9 @@ Update an authentication token's description using the InfluxDB user interface (
## Update a token in the InfluxDB UI
-1. Click the **Settings** icon in the navigation bar.
+1. Click the **Load Data** icon in the navigation bar.
- {{< nav-icon "settings" >}}
+ {{< nav-icon "disks" >}}
2. Click **Tokens**. All of your account's tokens appear.
3. Click the pencil icon {{< icon "pencil" >}} next to the token's name in the **Description** column.
diff --git a/content/v2.0/security/tokens/view-tokens.md b/content/v2.0/security/tokens/view-tokens.md
index 6dc3537e9..3e5fe9d22 100644
--- a/content/v2.0/security/tokens/view-tokens.md
+++ b/content/v2.0/security/tokens/view-tokens.md
@@ -16,9 +16,9 @@ command line interface (CLI).
## View tokens in the InfluxDB UI
-1. Click the **Settings** icon in the navigation bar.
+1. Click the **Load Data** icon in the navigation bar.
- {{< nav-icon "settings" >}}
+ {{< nav-icon "disks" >}}
2. Click **Tokens**. All of your account's tokens appear.
3. Click on a token name from the list to view the token and a summary of access permissions.
diff --git a/content/v2.0/security/use-vault.md b/content/v2.0/security/use-vault.md
deleted file mode 100644
index 5fc8bc3bd..000000000
--- a/content/v2.0/security/use-vault.md
+++ /dev/null
@@ -1,129 +0,0 @@
----
-title: Store secrets in Vault
-description: Manage authentication tokens in InfluxDB using the InfluxDB UI or the influx CLI.
-v2.0/tags: [tokens, security]
-menu:
- v2_0:
- parent: Security & authorization
-weight: 102
----
-
-[Vault](https://www.vaultproject.io/) secures, stores, and tightly controls access
-to tokens, passwords, certificates, and other sensitive secrets.
-Store sensitive secrets in Vault using the InfluxDB built-in Vault integration.
-
-{{% note %}}
-When not using Vault, secrets are Base64-encoded and stored in the InfluxDB embedded key value store,
-[BoltDB](https://github.com/boltdb/bolt).
-{{% /note %}}
-
-## Start a Vault server
-Start a Vault server and ensure InfluxDB has network access to the server.
-The following links provide information about running Vault in both development and production:
-
-- [Install Vault](https://learn.hashicorp.com/vault/getting-started/install)
-- [Start a Vault dev server](https://learn.hashicorp.com/vault/getting-started/dev-server)
-- [Deploy Vault](https://learn.hashicorp.com/vault/getting-started/deploy)
-
-For this example, install Vault on your local machine and start a Vault dev server.
-
-```sh
-vault server -dev
-```
-
-## Define Vault environment variables
-Use [Vault environment variables](https://www.vaultproject.io/docs/commands/index.html#environment-variables)
-to provide connection credentials and other important Vault-related information to InfluxDB.
-
-#### Required environment variables
-- `VAULT_ADDR`: The API address of your Vault server _(provided in the Vault server output)_.
-- `VAULT_TOKEN`: The [Vault token](https://learn.hashicorp.com/vault/getting-started/authentication)
- required to access your Vault server.
-
-_Your Vault server configuration may require other environment variables._
-
-```sh
-export VAULT_ADDR='http://127.0.0.1:8200' VAULT_TOKEN='s.0X0XxXXx0xXxXXxxxXxXxX0x'
-```
-
-## Start InfluxDB
-Start the [`influxd` service](/v2.0/reference/cli/influxd/) with the `--secret-store`
-option set to `vault`.
-
-```bash
-influxd --secret-store vault
-```
-
-## Test Vault storage
-With Vault and InfluxDB servers running, use the InfluxDB API to test Vault:
-
-{{% note %}}
-Replace `` with your [organization ID](/v2.0/organizations/view-orgs/#view-your-organization-id)
-and `YOURAUTHTOKEN` with your [InfluxDB authentication token](/v2.0/security/tokens/).
-{{% /note %}}
-
-##### Retrieve an organization's secrets
-```sh
-curl --request GET \
- --url http://localhost:9999/api/v2/orgs//secrets \
- --header 'authorization: Token YOURAUTHTOKEN'
-
-# should return
-# {
-# "links": {
-# "org": "/api/v2/orgs/031c8cbefe101000",
-# "secrets": "/api/v2/orgs/031c8cbefe101000/secrets"
-# },
-# "secrets": []
-# }
-```
-
-##### Add secrets to an organization
-```sh
-curl --request PATCH \
- --url http://localhost:9999/api/v2/orgs//secrets \
- --header 'authorization: Token YOURAUTHTOKEN' \
- --header 'content-type: application/json' \
- --data '{
- "foo": "bar",
- "hello": "world"
-}'
-
-# should return 204 no content
-```
-
-##### Retrieve the added secrets
-```bash
-curl --request GET \
- --url http://localhost:9999/api/v2/orgs//secrets \
- --header 'authorization: Token YOURAUTHTOKEN'
-
-# should return
-# {
-# "links": {
-# "org": "/api/v2/orgs/031c8cbefe101000",
-# "secrets": "/api/v2/orgs/031c8cbefe101000/secrets"
-# },
-# "secrets": [
-# "foo",
-# "hello"
-# ]
-# }
-```
-
-## Vault secrets storage
-For each organization, InfluxDB creates a [secrets engine](https://learn.hashicorp.com/vault/getting-started/secrets-engines)
-using the following pattern:
-
-```
-/secret/data/
-```
-
-Secrets are stored in Vault as key value pairs in their respective secrets engines.
-
-```
-/secret/data/031c8cbefe101000 ->
- this_key: foo
- that_key: bar
- a_secret: key
-```
diff --git a/content/v2.0/write-data/_index.md b/content/v2.0/write-data/_index.md
index 53e5756bd..d5b856dd8 100644
--- a/content/v2.0/write-data/_index.md
+++ b/content/v2.0/write-data/_index.md
@@ -114,11 +114,11 @@ influx write -b bucketName -o orgName -p s @/path/to/line-protocol.txt
```
## Write data in the InfluxDB UI
-1. Click **Settings** in the left navigation menu.
+1. Click **Load Data** in the left navigation menu.
- {{< nav-icon "settings" >}}
+ {{< nav-icon "load data" >}}
-2. Select the **Buckets** tab.
+2. Select **Buckets**.
3. Hover over the bucket to write data to and click **{{< icon "plus" >}} Add Data**.
4. Select **Line Protocol**.
_You can also [use Telegraf](/v2.0/write-data/use-telegraf/) or
diff --git a/content/v2.0/write-data/scrape-data/manage-scrapers/create-a-scraper.md b/content/v2.0/write-data/scrape-data/manage-scrapers/create-a-scraper.md
index 75f521b0f..c4fcae5b7 100644
--- a/content/v2.0/write-data/scrape-data/manage-scrapers/create-a-scraper.md
+++ b/content/v2.0/write-data/scrape-data/manage-scrapers/create-a-scraper.md
@@ -13,17 +13,17 @@ weight: 301
Create a new scraper in the InfluxDB user interface (UI).
## Create a scraper in the InfluxDB UI
-1. Click the **Settings** tab in the navigation bar.
+1. Click **Load Data** in the navigation bar.
- {{< nav-icon "settings" >}}
+ {{< nav-icon "load data" >}}
-2. Click the **Scrapers** tab.
+2. Click **Scrapers**.
3. Click **{{< icon "plus" >}} Create Scraper**.
4. Enter a **Name** for the scraper.
5. Select a **Bucket** to store the scraped data.
6. Enter the **Target URL** to scrape. The default URL value is `http://localhost:9999/metrics`,
which provides InfluxDB-specific metrics in the [Prometheus data format](https://prometheus.io/docs/instrumenting/exposition_formats/).
-7. Click **Finish**.
+7. Click **Create**.
The new scraper will begin scraping data after approximately 10 seconds,
then continue scraping in 10 second intervals.
diff --git a/content/v2.0/write-data/scrape-data/manage-scrapers/delete-a-scraper.md b/content/v2.0/write-data/scrape-data/manage-scrapers/delete-a-scraper.md
index 646658dfc..4e5580729 100644
--- a/content/v2.0/write-data/scrape-data/manage-scrapers/delete-a-scraper.md
+++ b/content/v2.0/write-data/scrape-data/manage-scrapers/delete-a-scraper.md
@@ -13,11 +13,11 @@ weight: 303
Delete a scraper from the InfluxDB user interface (UI).
## Delete a scraper from the InfluxDB UI
-1. Click the **Settings** tab in the navigation bar.
+1. Click **Load Data** in the navigation bar.
- {{< nav-icon "settings" >}}
+ {{< nav-icon "load data" >}}
-2. Click the **Scrapers** tab. A listing of any existing scrapers appears with the
- **Name**, **URL**, and **BUCKET** for each scraper.
+2. Click **Scrapers**. A listing of any existing scrapers appears with the
+ **Name**, **URL**, and **Bucket** for each scraper.
3. Hover over the scraper you want to delete and click **Delete**.
4. Click **Confirm**.
diff --git a/content/v2.0/write-data/scrape-data/manage-scrapers/update-a-scraper.md b/content/v2.0/write-data/scrape-data/manage-scrapers/update-a-scraper.md
index b6cf1c67c..25a163387 100644
--- a/content/v2.0/write-data/scrape-data/manage-scrapers/update-a-scraper.md
+++ b/content/v2.0/write-data/scrape-data/manage-scrapers/update-a-scraper.md
@@ -13,16 +13,16 @@ weight: 302
Update a scraper in the InfluxDB user interface (UI).
{{% note %}}
-Scraper **Target URLs** and **BUCKETS** can not be updated.
+Scraper **Target URLs** and **Buckets** can not be updated.
To modify either, [create a new scraper](/v2.0/write-data/scrape-data/manage-scrapers/create-a-scraper).
{{% /note %}}
## Update a scraper in the InfluxDB UI
-1. Click the **Settings** tab in the navigation bar.
+1. Click **Load Data** in the navigation bar.
- {{< nav-icon "settings" >}}
+ {{< nav-icon "load data" >}}
-2. Click the **Scrapers** tab. A list of existing scrapers appears.
+2. Click **Scrapers**. A list of existing scrapers appears.
3. Hover over the scraper you would like to update and click the **{{< icon "pencil" >}}**
that appears next to the scraper name.
4. Enter a new name for the scraper. Press Return or click out of the name field to save the change.
diff --git a/content/v2.0/write-data/use-telegraf/auto-config/_index.md b/content/v2.0/write-data/use-telegraf/auto-config/_index.md
index aaca5632d..64f426274 100644
--- a/content/v2.0/write-data/use-telegraf/auto-config/_index.md
+++ b/content/v2.0/write-data/use-telegraf/auto-config/_index.md
@@ -25,33 +25,32 @@ for using Telegraf with InfluxDB v2.0._
## Create a Telegraf configuration
1. Open the InfluxDB UI _(default: [localhost:9999](http://localhost:9999))_.
-2. Click **Organizations** in the left navigation menu.
+2. Click **Load Data** in the left navigation menu.
- {{< nav-icon "orgs" >}}
+ {{< nav-icon "load data" >}}
-3. Click on the name of your organization.
-4. Click the **Telegraf** tab.
-5. Click **{{< icon "plus" >}} Create Configuration**.
-6. In the **Bucket** dropdown, select the bucket where Telegraf will store collected data.
-7. Select one or more of the available plugin groups
+3. Select **Telegrafs**.
+4. Click **{{< icon "plus" >}} Create Configuration**.
+5. In the **Bucket** dropdown, select the bucket where Telegraf will store collected data.
+6. Select one or more of the available plugin groups
(e.g. **System**, **Docker**, **Kubernetes**, **NGINX**, or **Redis**), and click **Continue**.
{{% note %}}
All Telegraf plugins are supported, but only a subset are configurable using the InfluxDB UI.
To use plugins other than those listed, you must [manually configure Telegraf](/v2.0/write-data/use-telegraf/manual-config).
{{% /note %}}
-8. Review the list of **Plugins to Configure** for configuration requirements.
+7. Review the list of **Plugins to Configure** for configuration requirements.
Plugins listed with a {{< icon "check" >}}
require no additional configuration.
To configure a plugin or access plugin documentation, click the plugin name.
-9. Provide a **Telegraf Configuration Name** and an optional **Telegraf Configuration Description**.
-10. Click **Create and Verify**.
-11. The **Test Your Configuration** page provides instructions for how to start
+8. Provide a **Telegraf Configuration Name** and an optional **Telegraf Configuration Description**.
+9. Click **Create and Verify**.
+10. The **Test Your Configuration** page provides instructions for how to start
Telegraf using the generated configuration.
_See [Start Telegraf](#start-telegraf) below for detailed information about what each step does._
-12. Once Telegraf is running, click **Listen for Data** to confirm Telegraf is successfully
+11. Once Telegraf is running, click **Listen for Data** to confirm Telegraf is successfully
sending data to InfluxDB.
Once confirmed, a **Connection Found!** message appears.
-13. Click **Finish**. Your configuration name and the associated bucket name appears
+12. Click **Finish**. Your configuration name and the associated bucket name appears
in the list of Telegraf connections.
## Start Telegraf
diff --git a/content/v2.0/write-data/use-telegraf/auto-config/delete-telegraf-config.md b/content/v2.0/write-data/use-telegraf/auto-config/delete-telegraf-config.md
index d68a54f60..9c4d62231 100644
--- a/content/v2.0/write-data/use-telegraf/auto-config/delete-telegraf-config.md
+++ b/content/v2.0/write-data/use-telegraf/auto-config/delete-telegraf-config.md
@@ -12,16 +12,14 @@ weight: 303
To delete a Telegraf configuration:
-1. Click the **Settings** tab in the navigation bar.
+1. Click **Load Data** in the left navigation menu.
- {{< nav-icon "settings" >}}
+ {{< nav-icon "load data" >}}
-2. Click the **Telegraf** tab.
+2. Select **Telegraf**.
3. Hover over the configuration you want to delete, click the **{{< icon "trash" >}}**
icon, and **Delete**.
- {{< img-hd src="/img/2-0-telegraf-config-delete.png" />}}
-
{{% note %}}
Deleting a Telegraf configuration does not affect _**running**_ Telegraf agents.
However, if an agents stops, it needs a new configuration to start.
diff --git a/content/v2.0/write-data/use-telegraf/auto-config/update-telegraf-config.md b/content/v2.0/write-data/use-telegraf/auto-config/update-telegraf-config.md
index 1f001756f..aa26523eb 100644
--- a/content/v2.0/write-data/use-telegraf/auto-config/update-telegraf-config.md
+++ b/content/v2.0/write-data/use-telegraf/auto-config/update-telegraf-config.md
@@ -17,13 +17,11 @@ of a Telegraf configuration created in the UI.
You cannot modify Telegraf settings in existing Telegraf configurations through the UI.
{{% /note %}}
-1. Click the **Settings** tab in the navigation bar.
+1. Click **Load Data** in left the navigation bar.
- {{< nav-icon "settings" >}}
+ {{< nav-icon "load data" >}}
-2. Click the **Telegraf** tab.
+2. Select **Telegraf**.
3. Hover over the configuration you want to edit and click **{{< icon "pencil" >}}**
to update the name or description.
4. Press Return or click out of the editable field to save your changes.
-
- {{< img-hd src="/img/2-0-telegraf-config-update.png" />}}
diff --git a/content/v2.0/write-data/use-telegraf/auto-config/view-telegraf-config.md b/content/v2.0/write-data/use-telegraf/auto-config/view-telegraf-config.md
index ffe46cb51..52b87b54f 100644
--- a/content/v2.0/write-data/use-telegraf/auto-config/view-telegraf-config.md
+++ b/content/v2.0/write-data/use-telegraf/auto-config/view-telegraf-config.md
@@ -14,11 +14,11 @@ weight: 301
View Telegraf configuration information in the InfluxDB user interface (UI):
-1. Click the **Settings** tab in the navigation bar.
+1. Click **Load Data** in the navigation bar.
- {{< nav-icon "settings" >}}
+ {{< nav-icon "load data" >}}
-2. Click the **Telegraf** tab.
+2. Click **Telegraf**.
### View and download the telegraf.conf
To view the actual `telegraf.conf` associated with the configuration,
diff --git a/layouts/_default/version-landing.html b/layouts/_default/version-landing.html
index b6ee4d93a..2a1bcfdf3 100644
--- a/layouts/_default/version-landing.html
+++ b/layouts/_default/version-landing.html
@@ -35,6 +35,10 @@
Visualize Data
+
+ Monitor & alert
+
+
diff --git a/layouts/shortcodes/icon.html b/layouts/shortcodes/icon.html
index d1fb7b15a..6016f819d 100644
--- a/layouts/shortcodes/icon.html
+++ b/layouts/shortcodes/icon.html
@@ -41,7 +41,7 @@
{{ else if or (eq $icon "refresh") (eq $icon "replay") }}
{{ else if or (eq $icon "remove") (eq $icon "x") }}
-
+
{{ else if eq $icon "search" }}
{{ else if or (eq $icon "trash") (eq $icon "trashcan") (eq $icon "delete") }}
@@ -54,6 +54,10 @@
{{ else if eq $icon "chat" }}
+{{ else if or (eq $icon "eye-open") (eq $icon "eye") (eq $icon "view") }}
+
+{{ else if or (eq $icon "eye-closed") (eq $icon "hide") }}
+
{{ else if eq $icon "add-label" }}
{{ else if eq $icon "toggle" }}
diff --git a/layouts/shortcodes/nav-icon.html b/layouts/shortcodes/nav-icon.html
index f7a077c01..b2f5a22e8 100644
--- a/layouts/shortcodes/nav-icon.html
+++ b/layouts/shortcodes/nav-icon.html
@@ -11,11 +11,14 @@
{{ else if eq $navIcon "tasks" }}
{{ .Scratch.Set "icon" "calendar" }}
{{ .Scratch.Set "title" "Tasks" }}
-{{ else if or (eq $navIcon "organizations") (eq $navIcon "orgs") }}
- {{ .Scratch.Set "icon" "organizations" }}
- {{ .Scratch.Set "title" "Organizations" }}
+{{ else if or (eq $navIcon "monitor") (eq $navIcon "alerts") (eq $navIcon "bell") }}
+ {{ .Scratch.Set "icon" "bell" }}
+ {{ .Scratch.Set "title" "Monitoring & Alerting" }}
+{{ else if or (eq $navIcon "disks") (eq $navIcon "load data") (eq $navIcon "load-data") }}
+ {{ .Scratch.Set "icon" "disks-nav" }}
+ {{ .Scratch.Set "title" "Load Data" }}
{{ else if eq $navIcon "settings" }}
- {{ .Scratch.Set "icon" "wrench-2" }}
+ {{ .Scratch.Set "icon" "wrench-nav" }}
{{ .Scratch.Set "title" "Settings" }}
{{ else if or (eq $navIcon "feedback") }}
{{ .Scratch.Set "icon" "nav-chat" }}
diff --git a/static/fonts/icomoon.eot b/static/fonts/icomoon.eot
index a90f793ac..c2e03e9b4 100755
Binary files a/static/fonts/icomoon.eot and b/static/fonts/icomoon.eot differ
diff --git a/static/fonts/icomoon.svg b/static/fonts/icomoon.svg
index e7dda9a20..df72e9985 100755
--- a/static/fonts/icomoon.svg
+++ b/static/fonts/icomoon.svg
@@ -66,9 +66,14 @@
+
+
+
+
+
diff --git a/static/fonts/icomoon.ttf b/static/fonts/icomoon.ttf
index d59e5ca6c..0a5bee255 100755
Binary files a/static/fonts/icomoon.ttf and b/static/fonts/icomoon.ttf differ
diff --git a/static/fonts/icomoon.woff b/static/fonts/icomoon.woff
index 5b5167d80..a232e31cc 100755
Binary files a/static/fonts/icomoon.woff and b/static/fonts/icomoon.woff differ
diff --git a/static/img/2-0-dashboard-clone.png b/static/img/2-0-dashboard-clone.png
index eb14ceb82..009ec04d6 100644
Binary files a/static/img/2-0-dashboard-clone.png and b/static/img/2-0-dashboard-clone.png differ
diff --git a/static/img/2-0-dashboard-delete.png b/static/img/2-0-dashboard-delete.png
index aa19cd67d..21ebfb33f 100644
Binary files a/static/img/2-0-dashboard-delete.png and b/static/img/2-0-dashboard-delete.png differ
diff --git a/static/img/2-0-data-explorer-save-as-task.png b/static/img/2-0-data-explorer-save-as-task.png
index a36e18a09..18b296af5 100644
Binary files a/static/img/2-0-data-explorer-save-as-task.png and b/static/img/2-0-data-explorer-save-as-task.png differ
diff --git a/static/img/2-0-data-explorer-ui.png b/static/img/2-0-data-explorer-ui.png
index 795806152..68be51f6e 100644
Binary files a/static/img/2-0-data-explorer-ui.png and b/static/img/2-0-data-explorer-ui.png differ
diff --git a/static/img/2-0-telegraf-config-delete.png b/static/img/2-0-telegraf-config-delete.png
deleted file mode 100644
index 287fb397e..000000000
Binary files a/static/img/2-0-telegraf-config-delete.png and /dev/null differ
diff --git a/static/img/2-0-telegraf-config-update.png b/static/img/2-0-telegraf-config-update.png
deleted file mode 100644
index 936acd5f5..000000000
Binary files a/static/img/2-0-telegraf-config-update.png and /dev/null differ