diff --git a/.circleci/config.yml b/.circleci/config.yml index 1dd82d7b1..f3bf2c1a3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -4,7 +4,7 @@ jobs: docker: - image: circleci/node:latest environment: - HUGO_VERSION: "0.55.1" + HUGO_VERSION: "0.56.3" S3DEPLOY_VERSION: "2.3.2" steps: - checkout @@ -23,7 +23,10 @@ jobs: command: ./deploy/ci-install-s3deploy.sh - run: name: Install NPM dependencies - command: sudo npm i -g postcss-cli autoprefixer + command: sudo npm i -g postcss-cli autoprefixer redoc-cli + - run: + name: Generate API documentation + command: cd api-docs && bash generate-api-docs.sh - save_cache: key: install-v1-{{ checksum ".circleci/config.yml" }} paths: diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 000000000..f94d686d9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,17 @@ +_Describe the issue here._ + +##### Relevant URLs +- _Provide relevant URLs_ + +##### What products and version are you using? + + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..855a5991f --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,8 @@ +Closes # + +_Describe your proposed changes here._ + +- [ ] Signed the [InfluxData CLA](https://www.influxdata.com/legal/cla/) + ([if necessary](https://github.com/influxdata/docs-v2/blob/master/CONTRIBUTING.md#sign-the-influxdata-cla)) +- [ ] Tests pass (no build errors) +- [ ] Rebased/mergeable diff --git a/.github/SECURITY.md b/.github/SECURITY.md new file mode 100644 index 000000000..79d053066 --- /dev/null +++ b/.github/SECURITY.md @@ -0,0 +1,11 @@ +# Security Policy + +## Reporting a Vulnerability + +Reporting a Vulnerability + +InfluxData takes security and our users' trust very seriously. +If you believe you have found a security issue in any of our open source projects, +please responsibly disclose it by contacting security@influxdata.com. +More details about security vulnerability reporting, including our GPG key, +can be found here. https://www.influxdata.com/how-to-report-security-vulnerabilities/ diff --git a/.gitignore b/.gitignore index 07f198c85..b69d13c23 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ public node_modules *.log /resources +/content/**/api.html diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a4ead8b86..68b3605f5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,9 +3,12 @@ ## Sign the InfluxData CLA The InfluxData Contributor License Agreement (CLA) is part of the legal framework for the open-source ecosystem that protects both you and InfluxData. -In order to contribute to any InfluxData project, you must first sign the CLA. +To make substantial contributions to InfluxData documentation, first sign the InfluxData CLA. +What constitutes a "substantial" change is at the discretion of InfluxData documentation maintainers. -[Sign the InfluxData (CLA)](https://www.influxdata.com/legal/cla/) +[Sign the InfluxData CLA](https://www.influxdata.com/legal/cla/) + +_**Note:** Typo and broken link fixes are greatly appreciated and do not require signing the CLA._ ## Make suggested updates @@ -59,13 +62,16 @@ menu: v2_0: name: # Article name that only appears in the left nav parent: # Specifies a parent group and nests navigation items -weight: # Determines sort order in both the nav tree and in article lists. +weight: # Determines sort order in both the nav tree and in article lists draft: # If true, will not render page on build enterprise_all: # If true, specifies the doc as a whole is specific to InfluxDB Enterprise enterprise_some: # If true, specifies the doc includes some content specific to InfluxDB Enterprise cloud_all: # If true, specifies the doc as a whole is specific to InfluxDB Cloud cloud_some: # If true, specifies the doc includes some content specific to InfluxDB Cloud v2.x/tags: # Tags specific to each version (replace .x" with the appropriate minor version ) +related: # Creates links to specific internal and external content at the bottom of the page + - /path/to/related/article + - https://external-link.com, This is an external link ``` #### Title usage @@ -199,6 +205,17 @@ Insert Cloud-specific markdown content here. {{% /cloud %}} ``` +#### InfluxDB Cloud content block +The `{{ cloud-msg }}` shortcode creates a highlighted block of text specific to +InfluxDB Cloud meant to stand out from the rest of the article content. +It's format is similar to note and warning blocks. + +```md +{{% cloud-msg %}} +Insert Cloud-specific markdown content here. +{{% /cloud-msg %}} +``` + #### InfluxDB Cloud name The name used to refer to InfluxData's cloud offering is subject to change. To facilitate easy updates in the future, use the `cloud-name` short-code when @@ -310,6 +327,20 @@ WHERE time > now() - 15m {{< /code-tabs-wrapper >}} ~~~ +### Related content +Use the `related` frontmatter to include links to specific articles at the bottom of an article. + +- If the page exists inside of this documentation, just include the path to the page. + It will automatically detect the title of the page. +- If the page exists outside of this documentation, include the full URL and a title for the link. + The link and title must be in that order and must be separated by a comma and a space. + +```yaml +related: + - /v2.0/write-data/quick-start + - https://influxdata.com, This is an external link +``` + ### High-resolution images In many cases, screenshots included in the docs are taken from high-resolution (retina) screens. Because of this, the actual pixel dimension is 2x larger than it needs to be and is rendered 2x bigger than it should be. @@ -389,15 +420,20 @@ Below is a list of available icons (some are aliases): - dashboard - dashboards - data-explorer +- delete - download - duplicate - edit - expand - export +- eye +- eye-closed +- eye-open - feedback - fullscreen - gear - graph +- hide - influx - influx-icon - nav-admin @@ -422,7 +458,11 @@ Below is a list of available icons (some are aliases): - search - settings - tasks +- toggle +- trash +- trashcan - triangle +- view - wrench - x @@ -436,12 +476,15 @@ Provide a visual example of the the navigation item using the `nav-icon` shortco The following case insensitive values are supported: -- admin -- data explorer, data-explorer +- admin, influx +- data-explorer, data explorer - dashboards - tasks -- organizations, orgs -- configuration, config +- monitor, alerts, bell +- cloud, usage +- disks, load data, load-data +- settings +- feedback ### InfluxDB UI notification messages In some cases, documentation references a notification message that appears in @@ -491,6 +534,13 @@ menu: ### Image naming conventions Save images using the following naming format: `version-context-description.png`. For example, `2-0-visualizations-line-graph.png` or `2-0-tasks-add-new.png`. Specify a version other than 2.0 only if the image is specific to that version. +## InfluxDB API documentation +InfluxData uses [Redoc](https://github.com/Redocly/redoc) to generate the full +InfluxDB API documentation when documentation is deployed. +Redoc generates HTML documentation using the InfluxDB `swagger.yml`. +For more information about generating InfluxDB API documentation, see the +[API Documentation README](https://github.com/influxdata/docs-v2/tree/master/api-docs#readme). + ## New Versions of InfluxDB Version bumps occur regularly in the documentation. Each minor version has its own directory with unique content. @@ -536,7 +586,10 @@ _This example assumes v2.0 is the most recent version and v2.1 is the new versio latest_version: v2.1 ``` -7. Commit the changes and push the new branch to Github. +7. Copy the InfluxDB `swagger.yml` specific to the new version into the + `/api-docs/v/` directory. + +8. Commit the changes and push the new branch to Github. These changes lay the foundation for the new version. diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..c8dcb2a9f --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2019 InfluxData, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 422d5004c..9a026fc29 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,50 @@ +

+ +

+ # InfluxDB 2.0 Documentation This repository contains the InfluxDB 2.x documentation published at [docs.influxdata.com](https://docs.influxdata.com). ## Contributing -We welcome and encourage community contributions. For information about contributing to the InfluxData documentation, see [Contribution guidelines](CONTRIBUTING.md). +We welcome and encourage community contributions. +For information about contributing to the InfluxData documentation, see [Contribution guidelines](CONTRIBUTING.md). -## Run the docs locally -The InfluxData documentation uses [Hugo](https://gohugo.io/), a static site -generator built in Go. +## Reporting a Vulnerability +InfluxData takes security and our users' trust very seriously. +If you believe you have found a security issue in any of our open source projects, +please responsibly disclose it by contacting security@influxdata.com. +More details about security vulnerability reporting, +including our GPG key, can be found at https://www.influxdata.com/how-to-report-security-vulnerabilities/. -### Clone this repository -[Clone this repository](https://help.github.com/articles/cloning-a-repository/) -to your local machine. +## Running the docs locally -### Install Hugo -See the Hugo documentation for information about how to -[download and install Hugo](https://gohugo.io/getting-started/installing/). +1. [**Clone this repository**](https://help.github.com/articles/cloning-a-repository/) to your local machine. -### Install NodeJS & Asset Pipeline Tools -This project uses tools written in NodeJS to build and process stylesheets and javascript. -In order for assets to build correctly, [install NodeJS](https://nodejs.org/en/download/) -and run the following command to install the necessary tools: +2. **Install Hugo** -```sh -npm i -g postcss-cli autoprefixer -``` + The InfluxData documentation uses [Hugo](https://gohugo.io/), a static site generator built in Go. + See the Hugo documentation for information about how to [download and install Hugo](https://gohugo.io/getting-started/installing/). -### Start the hugo server -Hugo provides a local development server that generates the HTML pages, builds -the static assets, and serves them at `localhost:1313`. +3. **Install NodeJS & Asset Pipeline Tools** -Start the hugo server with: + This project uses tools written in NodeJS to build and process stylesheets and javascript. + In order for assets to build correctly, [install NodeJS](https://nodejs.org/en/download/) + and run the following command to install the necessary tools: -```bash -hugo server -``` + ``` + npm i -g postcss-cli autoprefixer + ``` -View the docs at [localhost:1313](http://localhost:1313). +4. **Start the Hugo server** + + Hugo provides a local development server that generates the HTML pages, builds + the static assets, and serves them at `localhost:1313`. + + Start the Hugo server from the repository: + + ``` + $ cd docs-v2/ + $ hugo server + ``` + + View the docs at [localhost:1313](http://localhost:1313). diff --git a/api-docs/README.md b/api-docs/README.md new file mode 100644 index 000000000..ec7a76e16 --- /dev/null +++ b/api-docs/README.md @@ -0,0 +1,37 @@ +## Generate InfluxDB API docs +InfluxDB uses [Redoc](https://github.com/Redocly/redoc/) and +[redoc-cli](https://github.com/Redocly/redoc/blob/master/cli/README.md) to generate +API documentation from the InfluxDB `swagger.yml`. + +To minimize repo size, the generated API documentation HTML is gitignored, therefore +not committed directly to the docs repo. +The InfluxDB docs deployment process uses swagger files in the `api-docs` directory +to generate version-specific API documentation. + +### Versioned swagger files +Structure versions swagger files using the following pattern: + +``` +api-docs/ + ├── v2.0/ + │ └── swagger.yml + ├── v2.1/ + │ └── swagger.yml + ├── v2.2/ + │ └── swagger.yml + └── etc... +``` + +### Generate API docs locally +Because the API documentation HTML is gitignored, you must manually generate it +to view the API docs locally. + +From the root of the docs repo, run: + +```sh +# Install redoc-cli +npm install -g redoc-cli + +# Generate the API docs +cd api-docs && generate-api-docs.sh +``` diff --git a/api-docs/generate-api-docs.sh b/api-docs/generate-api-docs.sh new file mode 100644 index 000000000..1f80e8a21 --- /dev/null +++ b/api-docs/generate-api-docs.sh @@ -0,0 +1,42 @@ +#!/bin/bash -e + +# Get list of versions from directory names +versions="$(ls -d -- */)" + +for version in $versions +do + # Trim the trailing slash off the directory name + version="${version%/}" + menu="${version//./_}_ref" + + # Generate the frontmatter + frontmatter="--- +title: InfluxDB $version API documentation +description: > + The InfluxDB API provides a programmatic interface for interactions with InfluxDB $version. +layout: api +menu: + $menu: + parent: InfluxDB v2 API + name: View full API docs +weight: 102 +--- +" + + # Use Redoc to generate the API html + redoc-cli bundle -t template.hbs \ + --title="InfluxDB $version API documentation" \ + --options.sortPropsAlphabetically \ + --options.menuToggle \ + --options.hideHostname \ + --templateOptions.version="$version" \ + $version/swagger.yml + + # Create temp file with frontmatter and Redoc html + echo "$frontmatter" >> $version.tmp + cat redoc-static.html >> $version.tmp + + # Remove redoc file and move the tmp file to it's proper place + rm -f redoc-static.html + mv $version.tmp ../content/$version/api.html +done diff --git a/api-docs/template.hbs b/api-docs/template.hbs new file mode 100644 index 000000000..b63535da2 --- /dev/null +++ b/api-docs/template.hbs @@ -0,0 +1,52 @@ + + + + + + {{title}} + + + + + + + + + + {{#unless disableGoogleFont}}{{/unless}} + {{{redocHead}}} + + + + +
+
+
+
+ InfluxDB {{templateOptions.version}} Docs +
+ {{{redocHTML}}} + + + + diff --git a/api-docs/v2.0/swagger.yml b/api-docs/v2.0/swagger.yml new file mode 100644 index 000000000..a74555930 --- /dev/null +++ b/api-docs/v2.0/swagger.yml @@ -0,0 +1,9851 @@ +openapi: "3.0.0" +info: + title: Influx API Service + version: 0.1.0 +servers: + - url: /api/v2 +paths: + /signin: + post: + operationId: PostSignin + summary: Exchange basic auth credentials for session + security: + - BasicAuth: [] + parameters: + - $ref: '#/components/parameters/TraceSpan' + responses: + '204': + description: Successfully authenticated + '401': + description: Unauthorized access + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '403': + description: user account is disabled + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unsuccessful authentication + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /signout: + post: + operationId: PostSignout + summary: Expire the current session + parameters: + - $ref: '#/components/parameters/TraceSpan' + responses: + '204': + description: Session successfully expired + '401': + description: Unauthorized access + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unsuccessful session expiry + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /: + get: + operationId: GetRoutes + summary: Map of all top level routes available + parameters: + - $ref: '#/components/parameters/TraceSpan' + responses: + default: + description: All routes + content: + application/json: + schema: + $ref: "#/components/schemas/Routes" + /setup: + get: + operationId: GetSetup + tags: + - Setup + summary: Check if database has default user, org, bucket + description: Returns `true` if no default user, organization, or bucket has been created. + parameters: + - $ref: '#/components/parameters/TraceSpan' + responses: + '200': + description: + allowed true or false + content: + application/json: + schema: + $ref: "#/components/schemas/IsOnboarding" + post: + operationId: PostSetup + tags: + - Setup + summary: Set up initial user, org and bucket + description: Post an onboarding request to set up initial user, org and bucket. + parameters: + - $ref: '#/components/parameters/TraceSpan' + requestBody: + description: Source to create + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/OnboardingRequest" + responses: + '201': + description: Created default user, bucket, org + content: + application/json: + schema: + $ref: "#/components/schemas/OnboardingResponse" + /documents/templates: + get: + operationId: GetDocumentsTemplates + tags: + - Templates + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: query + name: org + description: Specifies the name of the organization of the template. + schema: + type: string + - in: query + name: orgID + description: Specifies the organization ID of the template. + schema: + type: string + responses: + '200': + description: A list of template documents + content: + application/json: + schema: + $ref: "#/components/schemas/Documents" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostDocumentsTemplates + tags: + - Templates + summary: Create a template + parameters: + - $ref: '#/components/parameters/TraceSpan' + requestBody: + description: Template that will be created + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/DocumentCreate" + responses: + '201': + description: Template created + content: + application/json: + schema: + $ref: "#/components/schemas/Document" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/documents/templates/{templateID}': + get: + operationId: GetDocumentsTemplatesID + tags: + - Templates + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: templateID + schema: + type: string + required: true + description: The template ID. + responses: + '200': + description: The template requested + content: + application/json: + schema: + $ref: "#/components/schemas/Document" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + put: + operationId: PutDocumentsTemplatesID + tags: + - Templates + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: templateID + schema: + type: string + required: true + description: The template ID. + requestBody: + description: Template that will be updated + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/DocumentUpdate" + responses: + '200': + description: The newly updated template + content: + application/json: + schema: + $ref: "#/components/schemas/Document" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + delete: + operationId: DeleteDocumentsTemplatesID + tags: + - Templates + summary: Delete a template + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: templateID + schema: + type: string + required: true + description: The template ID. + responses: + '204': + description: Delete has been accepted + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/documents/templates/{templateID}/labels': + get: + operationId: GetDocumentsTemplatesIDLabels + tags: + - Templates + summary: List all labels for a template + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: templateID + schema: + type: string + required: true + description: The template ID. + responses: + '200': + description: A list of all labels for a template + content: + application/json: + schema: + $ref: "#/components/schemas/LabelsResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostDocumentsTemplatesIDLabels + tags: + - Templates + summary: Add a label to a template + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: templateID + schema: + type: string + required: true + description: The template ID. + requestBody: + description: Label to add + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/LabelMapping" + responses: + '201': + description: The label added to the template + content: + application/json: + schema: + $ref: "#/components/schemas/LabelResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/documents/templates/{templateID}/labels/{labelID}': + delete: + operationId: DeleteDocumentsTemplatesIDLabelsID + tags: + - Templates + summary: Delete a label from a template + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: templateID + schema: + type: string + required: true + description: The template ID. + - in: path + name: labelID + schema: + type: string + required: true + description: The label ID. + responses: + '204': + description: Delete has been accepted + '404': + description: Template not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /telegrafs: + get: + operationId: GetTelegrafs + tags: + - Telegrafs + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: query + name: orgID + description: The organization ID the Telegraf config belongs to. + schema: + type: string + responses: + '200': + description: A list of Telegraf configs + content: + application/json: + schema: + $ref: "#/components/schemas/Telegrafs" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostTelegrafs + tags: + - Telegrafs + summary: Create a Telegraf config + parameters: + - $ref: '#/components/parameters/TraceSpan' + requestBody: + description: Telegraf config to create + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/TelegrafRequest" + responses: + '201': + description: Telegraf config created + content: + application/json: + schema: + $ref: "#/components/schemas/Telegraf" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/telegrafs/{telegrafID}': + get: + operationId: GetTelegrafsID + tags: + - Telegrafs + summary: Retrieve a Telegraf config + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: telegrafID + schema: + type: string + required: true + description: The Telegraf config ID. + - in: header + name: Accept + required: false + schema: + type: string + default: application/toml + enum: + - application/toml + - application/json + - application/octet-stream + responses: + '200': + description: Telegraf config details + content: + application/toml: + example: "[agent]\ninterval = \"10s\"" + schema: + type: string + application/json: + schema: + $ref: "#/components/schemas/Telegraf" + application/octet-stream: + example: "[agent]\ninterval = \"10s\"" + schema: + type: string + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + put: + operationId: PutTelegrafsID + tags: + - Telegrafs + summary: Update a Telegraf config + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: telegrafID + schema: + type: string + required: true + description: The Telegraf config ID. + requestBody: + description: Telegraf config update to apply + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/TelegrafRequest" + responses: + '200': + description: An updated Telegraf config + content: + application/json: + schema: + $ref: "#/components/schemas/Telegraf" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + delete: + operationId: DeleteTelegrafsID + tags: + - Telegrafs + summary: Delete a Telegraf config + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: telegrafID + schema: + type: string + required: true + description: The Telegraf config ID. + responses: + '204': + description: Delete has been accepted + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/telegrafs/{telegrafID}/labels': + get: + operationId: GetTelegrafsIDLabels + tags: + - Telegrafs + summary: List all labels for a Telegraf config + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: telegrafID + schema: + type: string + required: true + description: The Telegraf config ID. + responses: + '200': + description: A list of all labels for a Telegraf config + content: + application/json: + schema: + $ref: "#/components/schemas/LabelsResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostTelegrafsIDLabels + tags: + - Telegrafs + summary: Add a label to a Telegraf config + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: telegrafID + schema: + type: string + required: true + description: The Telegraf config ID. + requestBody: + description: Label to add + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/LabelMapping" + responses: + '201': + description: The label added to the Telegraf config + content: + application/json: + schema: + $ref: "#/components/schemas/LabelResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/telegrafs/{telegrafID}/labels/{labelID}': + delete: + operationId: DeleteTelegrafsIDLabelsID + tags: + - Telegrafs + summary: Delete a label from a Telegraf config + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: telegrafID + schema: + type: string + required: true + description: The Telegraf config ID. + - in: path + name: labelID + schema: + type: string + required: true + description: The label ID. + responses: + '204': + description: Delete has been accepted + '404': + description: Telegraf config not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/telegrafs/{telegrafID}/members': + get: + operationId: GetTelegrafsIDMembers + tags: + - Users + - Telegrafs + summary: List all users with member privileges for a Telegraf config + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: telegrafID + schema: + type: string + required: true + description: The Telegraf config ID. + responses: + '200': + description: A list of Telegraf config members + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceMembers" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostTelegrafsIDMembers + tags: + - Users + - Telegrafs + summary: Add a member to a Telegraf config + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: telegrafID + schema: + type: string + required: true + description: The Telegraf config ID. + requestBody: + description: User to add as member + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/AddResourceMemberRequestBody" + responses: + '201': + description: Member added to Telegraf config + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceMember" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/telegrafs/{telegrafID}/members/{userID}': + delete: + operationId: DeleteTelegrafsIDMembersID + tags: + - Users + - Telegrafs + summary: Remove a member from a Telegraf config + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: userID + schema: + type: string + required: true + description: The ID of the member to remove. + - in: path + name: telegrafID + schema: + type: string + required: true + description: The Telegraf config ID. + responses: + '204': + description: Member removed + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/telegrafs/{telegrafID}/owners': + get: + operationId: GetTelegrafsIDOwners + tags: + - Users + - Telegrafs + summary: List all owners of a Telegraf config + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: telegrafID + schema: + type: string + required: true + description: The Telegraf config ID. + responses: + '200': + description: A list of Telegraf config owners + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceOwners" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostTelegrafsIDOwners + tags: + - Users + - Telegrafs + summary: Add an owner to a Telegraf config + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: telegrafID + schema: + type: string + required: true + description: The Telegraf config ID. + requestBody: + description: User to add as owner + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/AddResourceMemberRequestBody" + responses: + '201': + description: Telegraf config owner added + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceOwner" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/telegrafs/{telegrafID}/owners/{userID}': + delete: + operationId: DeleteTelegrafsIDOwnersID + tags: + - Users + - Telegrafs + summary: Remove an owner from a Telegraf config + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: userID + schema: + type: string + required: true + description: The ID of the owner to remove. + - in: path + name: telegrafID + schema: + type: string + required: true + description: The Telegraf config ID. + responses: + '204': + description: Owner removed + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /scrapers: + get: + operationId: GetScrapers + tags: + - ScraperTargets + summary: Get all scraper targets + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: query + name: name + description: Specifies the name of the scraper target. + schema: + type: string + - in: query + name: id + description: List of scraper target IDs to return. If both `id` and `owner` are specified, only `id` is used. + schema: + type: array + items: + type: string + - in: query + name: orgID + description: Specifies the organization ID of the scraper target. + schema: + type: string + - in: query + name: org + description: Specifies the organization name of the scraper target. + schema: + type: string + responses: + '200': + description: All scraper targets + content: + application/json: + schema: + $ref: "#/components/schemas/ScraperTargetResponses" + post: + operationId: PostScrapers + summary: Create a scraper target + tags: + - ScraperTargets + parameters: + - $ref: '#/components/parameters/TraceSpan' + requestBody: + description: Scraper target to create + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/ScraperTargetRequest" + responses: + '201': + description: Scraper target created + content: + application/json: + schema: + $ref: "#/components/schemas/ScraperTargetResponse" + default: + description: Internal server error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/scrapers/{scraperTargetID}': + get: + operationId: GetScrapersID + tags: + - ScraperTargets + summary: Get a scraper target by ID + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: scraperTargetID + required: true + schema: + type: string + description: The scraper target ID. + responses: + '200': + description: Scraper target updated + content: + application/json: + schema: + $ref: "#/components/schemas/ScraperTargetResponse" + default: + description: Internal server error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + delete: + operationId: DeleteScrapersID + tags: + - ScraperTargets + summary: Delete a scraper target + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: scraperTargetID + required: true + schema: + type: string + description: The scraper target ID. + responses: + '204': + description: Scraper target deleted + default: + description: Internal server error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + patch: + operationId: PatchScrapersID + summary: Update a scraper target + tags: + - ScraperTargets + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: scraperTargetID + required: true + schema: + type: string + description: The scraper target ID. + requestBody: + description: Scraper target update to apply + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/ScraperTargetRequest" + responses: + '200': + description: Scraper target updated + content: + application/json: + schema: + $ref: "#/components/schemas/ScraperTargetResponse" + default: + description: Internal server error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/scrapers/{scraperTargetID}/labels': + get: + operationId: GetScrapersIDLabels + tags: + - ScraperTargets + summary: List all labels for a scraper target + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: scraperTargetID + schema: + type: string + required: true + description: The scraper target ID. + responses: + '200': + description: A list of all labels for a scraper target + content: + application/json: + schema: + $ref: "#/components/schemas/LabelsResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostScrapersIDLabels + tags: + - ScraperTargets + summary: Add a label to a scraper target + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: scraperTargetID + schema: + type: string + required: true + description: The scraper target ID. + requestBody: + description: Label to add + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/LabelMapping" + responses: + '201': + description: The newly added label + content: + application/json: + schema: + $ref: "#/components/schemas/LabelResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/scrapers/{scraperTargetID}/labels/{labelID}': + delete: + operationId: DeleteScrapersIDLabelsID + tags: + - ScraperTargets + summary: Delete a label from a scraper target + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: scraperTargetID + schema: + type: string + required: true + description: The scraper target ID. + - in: path + name: labelID + schema: + type: string + required: true + description: The label ID. + responses: + '204': + description: Delete has been accepted + '404': + description: Scraper target not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + patch: + operationId: PatchScrapersIDLabelsID + tags: + - ScraperTargets + summary: Update a label on a scraper target + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: scraperTargetID + schema: + type: string + required: true + description: The scraper target ID. + - in: path + name: labelID + schema: + type: string + required: true + description: The label ID. + requestBody: + description: Label update to apply + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/Label" + responses: + '200': + description: Updated successfully + '404': + description: Scraper target not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/scrapers/{scraperTargetID}/members': + get: + operationId: GetScrapersIDMembers + tags: + - Users + - ScraperTargets + summary: List all users with member privileges for a scraper target + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: scraperTargetID + schema: + type: string + required: true + description: The scraper target ID. + responses: + '200': + description: A list of scraper target members + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceMembers" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostScrapersIDMembers + tags: + - Users + - ScraperTargets + summary: Add a member to a scraper target + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: scraperTargetID + schema: + type: string + required: true + description: The scraper target ID. + requestBody: + description: User to add as member + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/AddResourceMemberRequestBody" + responses: + '201': + description: Member added to scraper targets + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceMember" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/scrapers/{scraperTargetID}/members/{userID}': + delete: + operationId: DeleteScrapersIDMembersID + tags: + - Users + - ScraperTargets + summary: Remove a member from a scraper target + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: userID + schema: + type: string + required: true + description: The ID of member to remove. + - in: path + name: scraperTargetID + schema: + type: string + required: true + description: The scraper target ID. + responses: + '204': + description: Member removed + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/scrapers/{scraperTargetID}/owners': + get: + operationId: GetScrapersIDOwners + tags: + - Users + - ScraperTargets + summary: List all owners of a scraper target + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: scraperTargetID + schema: + type: string + required: true + description: The scraper target ID. + responses: + '200': + description: A list of scraper target owners + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceOwners" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostScrapersIDOwners + tags: + - Users + - ScraperTargets + summary: Add an owner to a scraper target + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: scraperTargetID + schema: + type: string + required: true + description: The scraper target ID. + requestBody: + description: User to add as owner + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/AddResourceMemberRequestBody" + responses: + '201': + description: Scraper target owner added + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceOwner" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/scrapers/{scraperTargetID}/owners/{userID}': + delete: + operationId: DeleteScrapersIDOwnersID + tags: + - Users + - ScraperTargets + summary: Remove an owner from a scraper target + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: userID + schema: + type: string + required: true + description: The ID of owner to remove. + - in: path + name: scraperTargetID + schema: + type: string + required: true + description: The scraper target ID. + responses: + '204': + description: Owner removed + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /variables: + get: + operationId: GetVariables + tags: + - Variables + summary: Get all variables + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: query + name: org + description: The organization name. + schema: + type: string + - in: query + name: orgID + description: The organization ID. + schema: + type: string + responses: + '200': + description: All variables for an organization + content: + application/json: + schema: + $ref: "#/components/schemas/Variables" + '400': + description: Invalid request + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Internal server error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostVariables + summary: Create a variable + tags: + - Variables + parameters: + - $ref: '#/components/parameters/TraceSpan' + requestBody: + description: Variable to create + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/Variable" + responses: + '201': + description: Variable created + content: + application/json: + schema: + $ref: "#/components/schemas/Variable" + default: + description: Internal server error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/variables/{variableID}': + get: + operationId: GetVariablesID + tags: + - Variables + summary: Get a variable + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: variableID + required: true + schema: + type: string + description: The variable ID. + responses: + '200': + description: Variable found + content: + application/json: + schema: + $ref: "#/components/schemas/Variable" + '404': + description: Variable not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Internal server error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + delete: + operationId: DeleteVariablesID + tags: + - Variables + summary: Delete a variable + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: variableID + required: true + schema: + type: string + description: The variable ID. + responses: + '204': + description: Variable deleted + default: + description: Internal server error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + patch: + operationId: PatchVariablesID + summary: Update a variable + tags: + - Variables + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: variableID + required: true + schema: + type: string + description: The variable ID. + requestBody: + description: Variable update to apply + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/Variable" + responses: + '200': + description: Variable updated + content: + application/json: + schema: + $ref: "#/components/schemas/Variable" + default: + description: Internal server error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + put: + operationId: PutVariablesID + summary: Replace a variable + tags: + - Variables + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: variableID + required: true + schema: + type: string + description: The variable ID. + requestBody: + description: Variable to replace + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/Variable" + responses: + '200': + description: Variable updated + content: + application/json: + schema: + $ref: "#/components/schemas/Variable" + default: + description: Internal server error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/variables/{variableID}/labels': + get: + operationId: GetVariablesIDLabels + tags: + - Variables + summary: List all labels for a variable + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: variableID + schema: + type: string + required: true + description: The variable ID. + responses: + '200': + description: A list of all labels for a variable + content: + application/json: + schema: + $ref: "#/components/schemas/LabelsResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostVariablesIDLabels + tags: + - Variables + summary: Add a label to a variable + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: variableID + schema: + type: string + required: true + description: The variable ID. + requestBody: + description: Label to add + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/LabelMapping" + responses: + '201': + description: The newly added label + content: + application/json: + schema: + $ref: "#/components/schemas/LabelResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/variables/{variableID}/labels/{labelID}': + delete: + operationId: DeleteVariablesIDLabelsID + tags: + - Variables + summary: Delete a label from a variable + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: variableID + schema: + type: string + required: true + description: The variable ID. + - in: path + name: labelID + schema: + type: string + required: true + description: The label ID to delete. + responses: + '204': + description: Delete has been accepted + '404': + description: Variable not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /write: + post: + operationId: PostWrite + tags: + - Write + summary: Write time series data into InfluxDB + requestBody: + description: Line protocol body + required: true + content: + text/plain: + schema: + type: string + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: header + name: Content-Encoding + description: When present, its value indicates to the database that compression is applied to the line-protocol body. + schema: + type: string + description: Specifies that the line protocol in the body is encoded with gzip or not encoded with identity. + default: identity + enum: + - gzip + - identity + - in: header + name: Content-Type + description: Content-Type is used to indicate the format of the data sent to the server. + schema: + type: string + description: Text/plain specifies the text line protocol; charset is assumed to be utf-8. + default: text/plain; charset=utf-8 + enum: + - text/plain + - text/plain; charset=utf-8 + - application/vnd.influx.arrow + - in: header + name: Content-Length + description: Content-Length is an entity header is indicating the size of the entity-body, in bytes, sent to the database. If the length is greater than the database max body configuration option, a 413 response is sent. + schema: + type: integer + description: The length in decimal number of octets. + - in: header + name: Accept + description: Specifies the return content format. + schema: + type: string + description: The return format for errors. + default: application/json + enum: + - application/json + - in: query + name: org + description: Specifies the destination organization for writes. Takes either the ID or Name interchangeably. If both `orgID` and `org` are specified, `org` takes precedence. + required: true + schema: + type: string + description: All points within batch are written to this organization. + - in: query + name: orgID + description: Specifies the ID of the destination organization for writes. If both `orgID` and `org` are specified, `org` takes precedence. + schema: + type: string + - in: query + name: bucket + description: The destination bucket for writes. + required: true + schema: + type: string + description: All points within batch are written to this bucket. + - in: query + name: precision + description: The precision for the unix timestamps within the body line-protocol. + schema: + $ref: "#/components/schemas/WritePrecision" + responses: + '204': + description: Write data is correctly formatted and accepted for writing to the bucket. + '400': + description: Line protocol poorly formed and no points were written. Response can be used to determine the first malformed line in the body line-protocol. All data in body was rejected and not written. + content: + application/json: + schema: + $ref: "#/components/schemas/LineProtocolError" + '401': + description: Token does not have sufficient permissions to write to this organization and bucket or the organization and bucket do not exist. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '403': + description: No token was sent and they are required. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '413': + description: Write has been rejected because the payload is too large. Error message returns max size supported. All data in body was rejected and not written. + content: + application/json: + schema: + $ref: "#/components/schemas/LineProtocolLengthError" + '429': + description: Token is temporarily over quota. The Retry-After header describes when to try the write again. + headers: + Retry-After: + description: A non-negative decimal integer indicating the seconds to delay after the response is received. + schema: + type: integer + format: int32 + '503': + description: Server is temporarily unavailable to accept writes. The Retry-After header describes when to try the write again. + headers: + Retry-After: + description: A non-negative decimal integer indicating the seconds to delay after the response is received. + schema: + type: integer + format: int32 + default: + description: Internal server error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /ready: + servers: + - url: / + get: + operationId: GetReady + tags: + - Ready + summary: Get the readiness of an instance at startup + parameters: + - $ref: '#/components/parameters/TraceSpan' + responses: + '200': + description: The instance is ready + content: + application/json: + schema: + $ref: "#/components/schemas/Ready" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /health: + servers: + - url: / + get: + operationId: GetHealth + tags: + - Health + summary: Get the health of an instance + parameters: + - $ref: '#/components/parameters/TraceSpan' + responses: + '200': + description: The instance is healthy + content: + application/json: + schema: + $ref: "#/components/schemas/HealthCheck" + '503': + description: The instance is unhealthy + content: + application/json: + schema: + $ref: "#/components/schemas/HealthCheck" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /sources: + post: + operationId: PostSources + tags: + - Sources + summary: Creates a source + parameters: + - $ref: '#/components/parameters/TraceSpan' + requestBody: + description: Source to create + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/Source" + responses: + '201': + description: Created Source + content: + application/json: + schema: + $ref: "#/components/schemas/Source" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + get: + operationId: GetSources + tags: + - Sources + summary: Get all sources + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: query + name: org + description: The organization name. + schema: + type: string + responses: + '200': + description: All sources + content: + application/json: + schema: + $ref: "#/components/schemas/Sources" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /sources/{sourceID}: + delete: + operationId: DeleteSourcesID + tags: + - Sources + summary: Delete a source + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: sourceID + schema: + type: string + required: true + description: The source ID. + responses: + '204': + description: Delete has been accepted + '404': + description: View not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + patch: + operationId: PatchSourcesID + tags: + - Sources + summary: Update a Source + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: sourceID + schema: + type: string + required: true + description: The source ID. + requestBody: + description: Source update + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/Source" + responses: + '200': + description: Created Source + content: + application/json: + schema: + $ref: "#/components/schemas/Source" + '404': + description: Source not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + get: + operationId: GetSourcesID + tags: + - Sources + summary: Get a source + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: sourceID + schema: + type: string + required: true + description: The source ID. + responses: + '200': + description: A source + content: + application/json: + schema: + $ref: "#/components/schemas/Source" + '404': + description: Source not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /sources/{sourceID}/health: + get: + operationId: GetSourcesIDHealth + tags: + - Sources + summary: Get the health of a source + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: sourceID + schema: + type: string + required: true + description: The source ID. + responses: + '200': + description: The source is healthy + content: + application/json: + schema: + $ref: "#/components/schemas/HealthCheck" + '503': + description: The source is not healthy + content: + application/json: + schema: + $ref: "#/components/schemas/HealthCheck" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /sources/{sourceID}/buckets: + get: + operationId: GetSourcesIDBuckets + tags: + - Sources + - Buckets + summary: Get buckets in a source + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: sourceID + schema: + type: string + required: true + description: The source ID. + - in: query + name: org + description: The organization name. + schema: + type: string + responses: + '200': + description: A source + content: + application/json: + schema: + $ref: "#/components/schemas/Buckets" + '404': + description: Source not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /labels: + post: + operationId: PostLabels + tags: + - Labels + summary: Create a label + requestBody: + description: Label to create + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/LabelCreateRequest" + responses: + '201': + description: Added label + content: + application/json: + schema: + $ref: "#/components/schemas/LabelResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + get: + operationId: GetLabels + tags: + - Labels + summary: Get all labels + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: query + name: orgID + description: The organization ID. + schema: + type: string + responses: + '200': + description: All labels + content: + application/json: + schema: + $ref: "#/components/schemas/LabelsResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /labels/{labelID}: + get: + operationId: GetLabelsID + tags: + - Labels + summary: Get a label + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: labelID + schema: + type: string + required: true + description: The ID of the label to update. + responses: + '200': + description: A label + content: + application/json: + schema: + $ref: "#/components/schemas/LabelResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + patch: + operationId: PatchLabelsID + tags: + - Labels + summary: Update a label + requestBody: + description: Label update + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/LabelUpdate" + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: labelID + schema: + type: string + required: true + description: The ID of the label to update. + responses: + '200': + description: Updated label + content: + application/json: + schema: + $ref: "#/components/schemas/LabelResponse" + '404': + description: Label not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + delete: + operationId: DeleteLabelsID + tags: + - Labels + summary: Delete a label + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: labelID + schema: + type: string + required: true + description: The ID of the label to delete. + responses: + '204': + description: Delete has been accepted + '404': + description: Label not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /dashboards: + post: + operationId: PostDashboards + tags: + - Dashboards + summary: Create a dashboard + parameters: + - $ref: '#/components/parameters/TraceSpan' + requestBody: + description: Dashboard to create + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreateDashboardRequest" + responses: + '201': + description: Added dashboard + content: + application/json: + schema: + $ref: "#/components/schemas/Dashboard" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + get: + operationId: GetDashboards + tags: + - Dashboards + summary: Get all dashboards + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: query + name: owner + description: The owner ID. + schema: + type: string + - in: query + name: sortBy + description: The column to sort by. + schema: + type: string + enum: + - "ID" + - "CreatedAt" + - "UpdatedAt" + - in: query + name: id + description: List of dashboard IDs to return. If both `id and `owner` are specified, only `id` is used. + schema: + type: array + items: + type: string + - in: query + name: orgID + description: The organization ID. + schema: + type: string + - in: query + name: org + description: The organization name. + schema: + type: string + responses: + '200': + description: All dashboards + content: + application/json: + schema: + $ref: "#/components/schemas/Dashboards" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/dashboards/{dashboardID}': + get: + operationId: GetDashboardsID + tags: + - Dashboards + summary: Get a Dashboard + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: dashboardID + schema: + type: string + required: true + description: The ID of the dashboard to update. + responses: + '200': + description: Get a single dashboard + content: + application/json: + schema: + $ref: "#/components/schemas/Dashboard" + '404': + description: Dashboard not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + patch: + operationId: PatchDashboardsID + tags: + - Dashboards + summary: Update a dashboard + requestBody: + description: Patching of a dashboard + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/Dashboard" + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: dashboardID + schema: + type: string + required: true + description: The ID of the dashboard to update. + responses: + '200': + description: Updated dashboard + content: + application/json: + schema: + $ref: "#/components/schemas/Dashboard" + '404': + description: Dashboard not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + delete: + operationId: DeleteDashboardsID + tags: + - Dashboards + summary: Delete a dashboard + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: dashboardID + schema: + type: string + required: true + description: The ID of the dashboard to update. + responses: + '204': + description: Delete has been accepted + '404': + description: Dashboard not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/dashboards/{dashboardID}/cells': + put: + operationId: PutDashboardsIDCells + tags: + - Cells + - Dashboards + summary: Replace cells in a dashboard + description: Replaces all cells in a dashboard. This is used primarily to update the positional information of all cells. + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/Cells" + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: dashboardID + schema: + type: string + required: true + description: The ID of the dashboard to update. + responses: + '200': + description: Replaced dashboard cells + content: + application/json: + schema: + $ref: "#/components/schemas/Dashboard" + '404': + description: Dashboard not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostDashboardsIDCells + tags: + - Cells + - Dashboards + summary: Create a dashboard cell + requestBody: + description: Cell that will be added + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CreateCell" + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: dashboardID + schema: + type: string + required: true + description: The ID of the dashboard to update. + responses: + '201': + description: Cell successfully added + content: + application/json: + schema: + $ref: "#/components/schemas/Cell" + '404': + description: Dashboard not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/dashboards/{dashboardID}/cells/{cellID}': + patch: + operationId: PatchDashboardsIDCellsID + tags: + - Cells + - Dashboards + summary: Update the non-positional information related to a cell + description: Updates the non positional information related to a cell. Updates to a single cell's positional data could cause grid conflicts. + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CellUpdate" + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: dashboardID + schema: + type: string + required: true + description: The ID of the dashboard to update. + - in: path + name: cellID + schema: + type: string + required: true + description: The ID of the cell to update. + responses: + '200': + description: Updated dashboard cell + content: + application/json: + schema: + $ref: "#/components/schemas/Cell" + '404': + description: Cell or dashboard not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + delete: + operationId: DeleteDashboardsIDCellsID + tags: + - Cells + - Dashboards + summary: Delete a dashboard cell + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: dashboardID + schema: + type: string + required: true + description: The ID of the dashboard to delete. + - in: path + name: cellID + schema: + type: string + required: true + description: The ID of the cell to delete. + responses: + '204': + description: Cell successfully deleted + '404': + description: Cell or dashboard not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/dashboards/{dashboardID}/cells/{cellID}/view': + get: + operationId: GetDashboardsIDCellsIDView + tags: + - Cells + - Dashboards + - Views + summary: Retrieve the view for a cell + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: dashboardID + schema: + type: string + required: true + description: The dashboard ID. + - in: path + name: cellID + schema: + type: string + required: true + description: The cell ID. + responses: + '200': + description: A dashboard cells view + content: + application/json: + schema: + $ref: "#/components/schemas/View" + '404': + description: Cell or dashboard not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + patch: + operationId: PatchDashboardsIDCellsIDView + tags: + - Cells + - Dashboards + - Views + summary: Update the view for a cell + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/View" + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: dashboardID + schema: + type: string + required: true + description: The ID of the dashboard to update. + - in: path + name: cellID + schema: + type: string + required: true + description: The ID of the cell to update. + responses: + '200': + description: Updated cell view + content: + application/json: + schema: + $ref: "#/components/schemas/View" + '404': + description: Cell or dashboard not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/dashboards/{dashboardID}/labels': + get: + operationId: GetDashboardsIDLabels + tags: + - Dashboards + summary: list all labels for a dashboard + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: dashboardID + schema: + type: string + required: true + description: The dashboard ID. + responses: + '200': + description: A list of all labels for a dashboard + content: + application/json: + schema: + $ref: "#/components/schemas/LabelsResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostDashboardsIDLabels + tags: + - Dashboards + summary: Add a label to a dashboard + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: dashboardID + schema: + type: string + required: true + description: The dashboard ID. + requestBody: + description: Label to add + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/LabelMapping" + responses: + '201': + description: The label added to the dashboard + content: + application/json: + schema: + $ref: "#/components/schemas/LabelResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/dashboards/{dashboardID}/labels/{labelID}': + delete: + operationId: DeleteDashboardsIDLabelsID + tags: + - Dashboards + summary: Delete a label from a dashboard + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: dashboardID + schema: + type: string + required: true + description: The dashboard ID. + - in: path + name: labelID + schema: + type: string + required: true + description: The ID of the label to delete. + responses: + '204': + description: Delete has been accepted + '404': + description: Dashboard not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/dashboards/{dashboardID}/members': + get: + operationId: GetDashboardsIDMembers + tags: + - Users + - Dashboards + summary: List all dashboard members + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: dashboardID + schema: + type: string + required: true + description: The dashboard ID. + responses: + '200': + description: A list of users who have member privileges for a dashboard + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceMembers" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostDashboardsIDMembers + tags: + - Users + - Dashboards + summary: Add a member to a dashboard + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: dashboardID + schema: + type: string + required: true + description: The dashboard ID. + requestBody: + description: User to add as member + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/AddResourceMemberRequestBody" + responses: + '201': + description: Added to dashboard members + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceMember" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/dashboards/{dashboardID}/members/{userID}': + delete: + operationId: DeleteDashboardsIDMembersID + tags: + - Users + - Dashboards + summary: Remove a member from a dashboard + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: userID + schema: + type: string + required: true + description: The ID of the member to remove. + - in: path + name: dashboardID + schema: + type: string + required: true + description: The dashboard ID. + responses: + '204': + description: Member removed + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/dashboards/{dashboardID}/owners': + get: + operationId: GetDashboardsIDOwners + tags: + - Users + - Dashboards + summary: List all dashboard owners + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: dashboardID + schema: + type: string + required: true + description: The dashboard ID. + responses: + '200': + description: A list of users who have owner privileges for a dashboard + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceOwners" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostDashboardsIDOwners + tags: + - Users + - Dashboards + summary: Add an owner to a dashboard + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: dashboardID + schema: + type: string + required: true + description: The dashboard ID. + requestBody: + description: User to add as owner + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/AddResourceMemberRequestBody" + responses: + '201': + description: Added to dashboard owners + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceOwner" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/dashboards/{dashboardID}/owners/{userID}': + delete: + operationId: DeleteDashboardsIDOwnersID + tags: + - Users + - Dashboards + summary: Remove an owner from a dashboard + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: userID + schema: + type: string + required: true + description: The ID of the owner to remove. + - in: path + name: dashboardID + schema: + type: string + required: true + description: The dashboard ID. + responses: + '204': + description: Owner removed + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/dashboards/{dashboardID}/logs': + get: + operationId: GetDashboardsIDLogs + tags: + - Dashboards + - OperationLogs + summary: Retrieve operation logs for a dashboard + parameters: + - $ref: '#/components/parameters/TraceSpan' + - $ref: '#/components/parameters/Offset' + - $ref: '#/components/parameters/Limit' + - in: path + name: dashboardID + required: true + description: The dashboard ID. + schema: + type: string + responses: + '200': + description: Operation logs for the dashboard + content: + application/json: + schema: + $ref: "#/components/schemas/OperationLogs" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /query/ast: + post: + operationId: PostQueryAst + description: Analyzes flux query and generates a query specification. + tags: + - Query + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: header + name: Content-Type + schema: + type: string + enum: + - application/json + requestBody: + description: Analyzed Flux query to generate abstract syntax tree. + content: + application/json: + schema: + $ref: "#/components/schemas/LanguageRequest" + responses: + '200': + description: Abstract syntax tree of flux query. + content: + application/json: + schema: + $ref: "#/components/schemas/ASTResponse" + default: + description: Any response other than 200 is an internal server error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /query/suggestions: + get: + operationId: GetQuerySuggestions + tags: + - Query + parameters: + - $ref: '#/components/parameters/TraceSpan' + responses: + '200': + description: Suggestions for next functions in call chain + content: + application/json: + schema: + $ref: "#/components/schemas/FluxSuggestions" + default: + description: Any response other than 200 is an internal server error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/query/suggestions/{name}': + get: + operationId: GetQuerySuggestionsName + tags: + - Query + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: name + schema: + type: string + required: true + description: The name of the branching suggestion. + responses: + '200': + description: Suggestions for next functions in call chain + content: + application/json: + schema: + $ref: "#/components/schemas/FluxSuggestion" + default: + description: Any response other than 200 is an internal server error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /authorizations: + get: + operationId: GetAuthorizations + tags: + - Authorizations + summary: List all authorizations + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: query + name: userID + schema: + type: string + description: Only show authorizations that belong to a user ID. + - in: query + name: user + schema: + type: string + description: Only show authorizations that belong to a user name. + - in: query + name: orgID + schema: + type: string + description: Only show authorizations that belong to an organization ID. + - in: query + name: org + schema: + type: string + description: Only show authorizations that belong to a organization name. + responses: + '200': + description: A list of authorizations + content: + application/json: + schema: + $ref: "#/components/schemas/Authorizations" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostAuthorizations + tags: + - Authorizations + summary: Create an authorization + parameters: + - $ref: '#/components/parameters/TraceSpan' + requestBody: + description: Authorization to create + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/Authorization" + responses: + '201': + description: Authorization created + content: + application/json: + schema: + $ref: "#/components/schemas/Authorization" + '400': + description: Invalid request + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /authorizations/{authID}: + get: + operationId: GetAuthorizationsID + tags: + - Authorizations + summary: Retrieve an authorization + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: authID + schema: + type: string + required: true + description: The ID of the authorization to get. + responses: + '200': + description: Authorization details + content: + application/json: + schema: + $ref: "#/components/schemas/Authorization" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + patch: + operationId: PatchAuthorizationsID + tags: + - Authorizations + summary: Update an authorization to be active or inactive + requestBody: + description: Authorization to update + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/AuthorizationUpdateRequest" + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: authID + schema: + type: string + required: true + description: The ID of the authorization to update. + responses: + '200': + description: The active or inactie authorization + content: + application/json: + schema: + $ref: "#/components/schemas/Authorization" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + delete: + operationId: DeleteAuthorizationsID + tags: + - Authorizations + summary: Delete a authorization + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: authID + schema: + type: string + required: true + description: The ID of the authorization to delete. + responses: + '204': + description: Authorization deleted + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /query/analyze: + post: + operationId: PostQueryAnalyze + tags: + - Query + summary: Analyze an InfluxQL or Flux query + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: header + name: Content-Type + schema: + type: string + enum: + - application/json + requestBody: + description: Flux or InfluxQL query to analyze + content: + application/json: + schema: + $ref: "#/components/schemas/Query" + responses: + '200': + description: Query analyze results. Errors will be empty if the query is valid. + content: + application/json: + schema: + $ref: "#/components/schemas/AnalyzeQueryResponse" + default: + description: Internal server error + headers: + X-Influx-Error: + description: Error string describing the problem + schema: + type: string + X-Influx-Reference: + description: Reference code unique to the error type + schema: + type: integer + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /query: + post: + operationId: PostQuery + tags: + - Query + summary: Query InfluxDB + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: header + name: Accept-Encoding + description: The Accept-Encoding request HTTP header advertises which content encoding, usually a compression algorithm, the client is able to understand. + schema: + type: string + description: Specifies that the query response in the body should be encoded with gzip or not encoded with identity. + default: identity + enum: + - gzip + - identity + - in: header + name: Content-Type + schema: + type: string + enum: + - application/json + - application/vnd.flux + - in: query + name: org + description: Specifies the name of the organization executing the query. Takes either the ID or Name interchangeably. If both `orgID` and `org` are specified, `org` takes precedence. + schema: + type: string + - in: query + name: orgID + description: Specifies the ID of the organization executing the query. If both `orgID` and `org` are specified, `org` takes precedence. + schema: + type: string + requestBody: + description: Flux query or specification to execute + content: + application/json: + schema: + $ref: "#/components/schemas/Query" + application/vnd.flux: + schema: + type: string + responses: + '200': + description: Query results + headers: + Content-Encoding: + description: The Content-Encoding entity header is used to compress the media-type. When present, its value indicates which encodings were applied to the entity-body + schema: + type: string + description: Specifies that the response in the body is encoded with gzip or not encoded with identity. + default: identity + enum: + - gzip + - identity + content: + text/csv: + schema: + type: string + example: > + result,table,_start,_stop,_time,region,host,_value + mean,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:00Z,east,A,15.43 + mean,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:20Z,east,B,59.25 + mean,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:40Z,east,C,52.62 + application/vnd.influx.arrow: + schema: + type: string + format: binary + '429': + description: Token is temporarily over quota. The Retry-After header describes when to try the read again. + headers: + Retry-After: + description: A non-negative decimal integer indicating the seconds to delay after the response is received. + schema: + type: integer + format: int32 + default: + description: Error processing query + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /buckets: + get: + operationId: GetBuckets + tags: + - Buckets + summary: List all buckets + parameters: + - $ref: '#/components/parameters/TraceSpan' + - $ref: "#/components/parameters/Offset" + - $ref: "#/components/parameters/Limit" + - in: query + name: org + description: The organization name. + schema: + type: string + - in: query + name: orgID + description: The organization ID. + schema: + type: string + - in: query + name: name + description: Only returns buckets with a specific name. + schema: + type: string + responses: + '200': + description: A list of buckets + content: + application/json: + schema: + $ref: "#/components/schemas/Buckets" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostBuckets + tags: + - Buckets + summary: Create a bucket + parameters: + - $ref: '#/components/parameters/TraceSpan' + requestBody: + description: Bucket to create + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/Bucket" + responses: + '201': + description: Bucket created + content: + application/json: + schema: + $ref: "#/components/schemas/Bucket" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/buckets/{bucketID}': + get: + operationId: GetBucketsID + tags: + - Buckets + summary: Retrieve a bucket + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: bucketID + schema: + type: string + required: true + description: The bucket ID. + responses: + '200': + description: Bucket details + content: + application/json: + schema: + $ref: "#/components/schemas/Bucket" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + patch: + operationId: PatchBucketsID + tags: + - Buckets + summary: Update a bucket + requestBody: + description: Bucket update to apply + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/Bucket" + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: bucketID + schema: + type: string + required: true + description: The bucket ID. + responses: + '200': + description: An updated bucket + content: + application/json: + schema: + $ref: "#/components/schemas/Bucket" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + delete: + operationId: DeleteBucketsID + tags: + - Buckets + summary: Delete a bucket + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: bucketID + schema: + type: string + required: true + description: The ID of the bucket to delete. + responses: + '204': + description: Delete has been accepted + '404': + description: Bucket not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/buckets/{bucketID}/labels': + get: + operationId: GetBucketsIDLabels + tags: + - Buckets + summary: List all labels for a bucket + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: bucketID + schema: + type: string + required: true + description: The bucket ID. + responses: + '200': + description: A list of all labels for a bucket + content: + application/json: + schema: + $ref: "#/components/schemas/LabelsResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostBucketsIDLabels + tags: + - Buckets + summary: Add a label to a bucket + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: bucketID + schema: + type: string + required: true + description: The bucket ID. + requestBody: + description: Label to add + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/LabelMapping" + responses: + '201': + description: The newly added label + content: + application/json: + schema: + $ref: "#/components/schemas/LabelResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/buckets/{bucketID}/labels/{labelID}': + delete: + operationId: DeleteBucketsIDLabelsID + tags: + - Buckets + summary: delete a label from a bucket + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: bucketID + schema: + type: string + required: true + description: The bucket ID. + - in: path + name: labelID + schema: + type: string + required: true + description: The ID of the label to delete. + responses: + '204': + description: Delete has been accepted + '404': + description: Bucket not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/buckets/{bucketID}/members': + get: + operationId: GetBucketsIDMembers + tags: + - Users + - Buckets + summary: List all users with member privileges for a bucket + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: bucketID + schema: + type: string + required: true + description: The bucket ID. + responses: + '200': + description: A list of bucket members + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceMembers" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostBucketsIDMembers + tags: + - Users + - Buckets + summary: Add a member to a bucket + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: bucketID + schema: + type: string + required: true + description: The bucket ID. + requestBody: + description: User to add as member + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/AddResourceMemberRequestBody" + responses: + '201': + description: Member added to bucket + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceMember" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/buckets/{bucketID}/members/{userID}': + delete: + operationId: DeleteBucketsIDMembersID + tags: + - Users + - Buckets + summary: Remove a member from a bucket + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: userID + schema: + type: string + required: true + description: The ID of the member to remove. + - in: path + name: bucketID + schema: + type: string + required: true + description: The bucket ID. + responses: + '204': + description: Member removed + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/buckets/{bucketID}/owners': + get: + operationId: GetBucketsIDOwners + tags: + - Users + - Buckets + summary: List all owners of a bucket + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: bucketID + schema: + type: string + required: true + description: The bucket ID. + responses: + '200': + description: A list of bucket owners + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceOwners" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostBucketsIDOwners + tags: + - Users + - Buckets + summary: Add an owner to a bucket + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: bucketID + schema: + type: string + required: true + description: The bucket ID. + requestBody: + description: User to add as owner + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/AddResourceMemberRequestBody" + responses: + '201': + description: Bucket owner added + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceOwner" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/buckets/{bucketID}/owners/{userID}': + delete: + operationId: DeleteBucketsIDOwnersID + tags: + - Users + - Buckets + summary: Remove an owner from a bucket + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: userID + schema: + type: string + required: true + description: The ID of the owner to remove. + - in: path + name: bucketID + schema: + type: string + required: true + description: The bucket ID. + responses: + '204': + description: Owner removed + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/buckets/{bucketID}/logs': + get: + operationId: GetBucketsIDLogs + tags: + - Buckets + - OperationLogs + summary: Retrieve operation logs for a bucket + parameters: + - $ref: '#/components/parameters/TraceSpan' + - $ref: '#/components/parameters/Offset' + - $ref: '#/components/parameters/Limit' + - in: path + name: bucketID + required: true + description: The bucket ID. + schema: + type: string + responses: + '200': + description: Operation logs for the bucket + content: + application/json: + schema: + $ref: "#/components/schemas/OperationLogs" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /orgs: + get: + operationId: GetOrgs + tags: + - Organizations + summary: List all organizations + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: query + name: org + schema: + type: string + description: Filter organizations to a specific organization name. + - in: query + name: orgID + schema: + type: string + description: Filter organizations to a specific organization ID. + responses: + '200': + description: A list of organizations + content: + application/json: + schema: + $ref: "#/components/schemas/Organizations" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostOrgs + tags: + - Organizations + summary: Create an organization + parameters: + - $ref: '#/components/parameters/TraceSpan' + requestBody: + description: Organization to create + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/Organization" + responses: + '201': + description: Organization created + content: + application/json: + schema: + $ref: "#/components/schemas/Organization" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/orgs/{orgID}': + get: + operationId: GetOrgsID + tags: + - Organizations + summary: Retrieve an organization + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: orgID + schema: + type: string + required: true + description: The ID of the organization to get. + responses: + '200': + description: Organization details + content: + application/json: + schema: + $ref: "#/components/schemas/Organization" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + patch: + operationId: PatchOrgsID + tags: + - Organizations + summary: Update an organization + requestBody: + description: Organization update to apply + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/Organization" + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: orgID + schema: + type: string + required: true + description: The ID of the organization to get. + responses: + '200': + description: Organization updated + content: + application/json: + schema: + $ref: "#/components/schemas/Organization" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + delete: + operationId: DeleteOrgsID + tags: + - Organizations + summary: Delete an organization + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: orgID + schema: + type: string + required: true + description: The ID of the organization to delete. + responses: + '204': + description: Delete has been accepted + '404': + description: Organization not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/orgs/{orgID}/labels': + get: + operationId: GetOrgsIDLabels + tags: + - Organizations + summary: List all labels for a organization + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: orgID + schema: + type: string + required: true + description: The organization ID. + responses: + '200': + description: A list of all labels for an organization + content: + application/json: + schema: + $ref: "#/components/schemas/LabelsResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostOrgsIDLabels + tags: + - Organizations + summary: Add a label to an organization + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: orgID + schema: + type: string + required: true + description: The organization ID. + requestBody: + description: Label to add + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/LabelMapping" + responses: + '201': + description: Returns the created label + content: + application/json: + schema: + $ref: "#/components/schemas/LabelResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/orgs/{orgID}/labels/{labelID}': + delete: + operationId: DeleteOrgsIDLabelsID + tags: + - Organizations + summary: Delete a label from an organization + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: orgID + schema: + type: string + required: true + description: The organization ID. + - in: path + name: labelID + schema: + type: string + required: true + description: The label ID. + responses: + '204': + description: Delete has been accepted + '404': + description: Organization not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/orgs/{orgID}/secrets': + get: + operationId: GetOrgsIDSecrets + tags: + - Secrets + - Organizations + summary: List all secret keys for an organization + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: orgID + schema: + type: string + required: true + description: The organization ID. + responses: + '200': + description: A list of all secret keys + content: + application/json: + schema: + $ref: "#/components/schemas/SecretKeysResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + patch: + operationId: PatchOrgsIDSecrets + tags: + - Secrets + - Organizations + summary: Update secrets in an organization + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: orgID + schema: + type: string + required: true + description: The organization ID. + requestBody: + description: Secret key value pairs to update/add + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/Secrets" + responses: + '204': + description: Keys successfully patched + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/orgs/{orgID}/secrets/delete': # had to make this because swagger wouldn't let me have a request body with a DELETE + post: + operationId: PostOrgsIDSecrets + tags: + - Secrets + - Organizations + summary: Delete secrets from an organization + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: orgID + schema: + type: string + required: true + description: The organization ID. + requestBody: + description: Secret key to delete + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/SecretKeys" + responses: + '204': + description: Keys successfully patched + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/orgs/{orgID}/members': + get: + operationId: GetOrgsIDMembers + tags: + - Users + - Organizations + summary: List all members of an organization + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: orgID + schema: + type: string + required: true + description: The organization ID. + responses: + '200': + description: A list of organization members + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceMembers" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostOrgsIDMembers + tags: + - Users + - Organizations + summary: Add a member to an organization + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: orgID + schema: + type: string + required: true + description: The organization ID. + requestBody: + description: User to add as member + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/AddResourceMemberRequestBody" + responses: + '201': + description: Added to organization created + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceMember" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/orgs/{orgID}/members/{userID}': + delete: + operationId: DeleteOrgsIDMembersID + tags: + - Users + - Organizations + summary: Remove a member from an organization + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: userID + schema: + type: string + required: true + description: The ID of the member to remove. + - in: path + name: orgID + schema: + type: string + required: true + description: The organization ID. + responses: + '204': + description: Member removed + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/orgs/{orgID}/owners': + get: + operationId: GetOrgsIDOwners + tags: + - Users + - Organizations + summary: List all owners of an organization + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: orgID + schema: + type: string + required: true + description: The organization ID. + responses: + '200': + description: A list of organization owners + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceOwners" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostOrgsIDOwners + tags: + - Users + - Organizations + summary: Add an owner to an organization + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: orgID + schema: + type: string + required: true + description: The organization ID. + requestBody: + description: User to add as owner + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/AddResourceMemberRequestBody" + responses: + '201': + description: Organization owner added + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceOwner" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/orgs/{orgID}/owners/{userID}': + delete: + operationId: DeleteOrgsIDOwnersID + tags: + - Users + - Organizations + summary: Remove an owner from an organization + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: userID + schema: + type: string + required: true + description: The ID of the owner to remove. + - in: path + name: orgID + schema: + type: string + required: true + description: The organization ID. + responses: + '204': + description: Owner removed + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/orgs/{orgID}/logs': + get: + operationId: GetOrgsIDLogs + tags: + - Organizations + - OperationLogs + summary: Retrieve operation logs for an organization + parameters: + - $ref: '#/components/parameters/TraceSpan' + - $ref: '#/components/parameters/Offset' + - $ref: '#/components/parameters/Limit' + - in: path + name: orgID + required: true + description: The organization ID. + schema: + type: string + responses: + '200': + description: Operation logs for the organization + content: + application/json: + schema: + $ref: "#/components/schemas/OperationLogs" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /tasks: + get: + operationId: GetTasks + tags: + - Tasks + summary: List all tasks + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: query + name: name + description: Returns task with a specific name. + schema: + type: string + - in: query + name: after + schema: + type: string + description: Return tasks after a specified ID. + - in: query + name: user + schema: + type: string + description: Filter tasks to a specific user ID. + - in: query + name: org + schema: + type: string + description: Filter tasks to a specific organization name. + - in: query + name: orgID + schema: + type: string + description: Filter tasks to a specific organization ID. + - in: query + name: limit + schema: + type: integer + minimum: 1 + maximum: 500 + default: 100 + description: The number of tasks to return + responses: + '200': + description: A list of tasks + content: + application/json: + schema: + $ref: "#/components/schemas/Tasks" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostTasks + tags: + - Tasks + summary: Create a new task + parameters: + - $ref: '#/components/parameters/TraceSpan' + requestBody: + description: Task to create + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/TaskCreateRequest" + responses: + '201': + description: Task created + content: + application/json: + schema: + $ref: "#/components/schemas/Task" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/tasks/{taskID}': + get: + operationId: GetTasksID + tags: + - Tasks + summary: Retrieve a task + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: taskID + schema: + type: string + required: true + description: The task ID. + responses: + '200': + description: Task details + content: + application/json: + schema: + $ref: "#/components/schemas/Task" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + patch: + operationId: PatchTasksID + tags: + - Tasks + summary: Update a task + description: Update a task. This will cancel all queued runs. + requestBody: + description: Task update to apply + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/TaskUpdateRequest" + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: taskID + schema: + type: string + required: true + description: The task ID. + responses: + '200': + description: Task updated + content: + application/json: + schema: + $ref: "#/components/schemas/Task" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + delete: + operationId: DeleteTasksID + tags: + - Tasks + summary: Delete a task + description: Deletes a task and all associated records + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: taskID + schema: + type: string + required: true + description: The ID of the task to delete. + responses: + '204': + description: Task deleted + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/tasks/{taskID}/runs': + get: + operationId: GetTasksIDRuns + tags: + - Tasks + summary: List runs for a task + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: taskID + schema: + type: string + required: true + description: The ID of the task to get runs for. + - in: query + name: after + schema: + type: string + description: Returns runs after a specific ID. + - in: query + name: limit + schema: + type: integer + minimum: 1 + maximum: 500 + default: 100 + description: The number of runs to return + - in: query + name: afterTime + schema: + type: string + format: date-time + description: Filter runs to those scheduled after this time, RFC3339 + - in: query + name: beforeTime + schema: + type: string + format: date-time + description: Filter runs to those scheduled before this time, RFC3339 + responses: + '200': + description: A list of task runs + content: + application/json: + schema: + $ref: "#/components/schemas/Runs" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostTasksIDRuns + tags: + - Tasks + summary: Manually start a task run, overriding the current schedule + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: taskID + schema: + type: string + required: true + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/RunManually" + responses: + '201': + description: Run scheduled to start + content: + application/json: + schema: + $ref: "#/components/schemas/Run" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/tasks/{taskID}/runs/{runID}': + get: + operationId: GetTasksIDRunsID + tags: + - Tasks + summary: Retrieve a single run for a task + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: taskID + schema: + type: string + required: true + description: The task ID. + - in: path + name: runID + schema: + type: string + required: true + description: The run ID. + responses: + '200': + description: The run record + content: + application/json: + schema: + $ref: "#/components/schemas/Run" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + delete: + operationId: DeleteTasksIDRunsID + tags: + - Tasks + summary: Cancel a running task + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: taskID + schema: + type: string + required: true + description: The task ID. + - in: path + name: runID + schema: + type: string + required: true + description: The run ID. + responses: + '204': + description: Delete has been accepted + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/tasks/{taskID}/runs/{runID}/retry': + post: + operationId: PostTasksIDRunsIDRetry + tags: + - Tasks + summary: Retry a task run + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: taskID + schema: + type: string + required: true + description: The task ID. + - in: path + name: runID + schema: + type: string + required: true + description: The run ID. + responses: + '200': + description: Run that has been queued + content: + application/json: + schema: + $ref: "#/components/schemas/Run" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/tasks/{taskID}/logs': + get: + operationId: GetTasksIDLogs + tags: + - Tasks + summary: Retrieve all logs for a task + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: taskID + schema: + type: string + required: true + description: The task ID. + responses: + '200': + description: All logs for a task + content: + application/json: + schema: + $ref: "#/components/schemas/Logs" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/tasks/{taskID}/runs/{runID}/logs': + get: + operationId: GetTasksIDRunsIDLogs + tags: + - Tasks + summary: Retrieve all logs for a run + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: taskID + schema: + type: string + required: true + description: ID of task to get logs for. + - in: path + name: runID + schema: + type: string + required: true + description: ID of run to get logs for. + responses: + '200': + description: All logs for a run + content: + application/json: + schema: + $ref: "#/components/schemas/Logs" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/tasks/{taskID}/labels': + get: + operationId: GetTasksIDLabels + tags: + - Tasks + summary: List all labels for a task + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: taskID + schema: + type: string + required: true + description: The task ID. + responses: + '200': + description: A list of all labels for a task + content: + application/json: + schema: + $ref: "#/components/schemas/LabelsResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostTasksIDLabels + tags: + - Tasks + summary: Add a label to a task + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: taskID + schema: + type: string + required: true + description: The task ID. + requestBody: + description: Label to add + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/LabelMapping" + responses: + '200': + description: A list of all labels for a task + content: + application/json: + schema: + $ref: "#/components/schemas/LabelResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/tasks/{taskID}/labels/{labelID}': + delete: + operationId: DeleteTasksIDLabelsID + tags: + - Tasks + summary: Delete a label from a task + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: taskID + schema: + type: string + required: true + description: The task ID. + - in: path + name: labelID + schema: + type: string + required: true + description: The label ID. + responses: + '204': + description: Delete has been accepted + '404': + description: Task not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /me: + get: + operationId: GetMe + tags: + - Users + summary: Return the current authenticated user + parameters: + - $ref: '#/components/parameters/TraceSpan' + responses: + '200': + description: Currently authenticated user + content: + application/json: + schema: + $ref: "#/components/schemas/User" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /me/password: + put: + operationId: PutMePassword + tags: + - Users + summary: Update a password + security: + - BasicAuth: [] + parameters: + - $ref: '#/components/parameters/TraceSpan' + requestBody: + description: New password + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/PasswordResetBody" + responses: + '204': + description: Password successfully updated + default: + description: Unsuccessful authentication + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/tasks/{taskID}/members': + get: + operationId: GetTasksIDMembers + tags: + - Users + - Tasks + summary: List all task members + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: taskID + schema: + type: string + required: true + description: The task ID. + responses: + '200': + description: A list of users who have member privileges for a task + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceMembers" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostTasksIDMembers + tags: + - Users + - Tasks + summary: Add a member to a task + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: taskID + schema: + type: string + required: true + description: The task ID. + requestBody: + description: User to add as member + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/AddResourceMemberRequestBody" + responses: + '201': + description: Added to task members + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceMember" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/tasks/{taskID}/members/{userID}': + delete: + operationId: DeleteTasksIDMembersID + tags: + - Users + - Tasks + summary: Remove a member from a task + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: userID + schema: + type: string + required: true + description: The ID of the member to remove. + - in: path + name: taskID + schema: + type: string + required: true + description: The task ID. + responses: + '204': + description: Member removed + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/tasks/{taskID}/owners': + get: + operationId: GetTasksIDOwners + tags: + - Users + - Tasks + summary: List all owners of a task + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: taskID + schema: + type: string + required: true + description: The task ID. + responses: + '200': + description: A list of users who have owner privileges for a task + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceOwners" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostTasksIDOwners + tags: + - Users + - Tasks + summary: Add an owner to a task + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: taskID + schema: + type: string + required: true + description: The task ID. + requestBody: + description: User to add as owner + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/AddResourceMemberRequestBody" + responses: + '201': + description: Added to task owners + content: + application/json: + schema: + $ref: "#/components/schemas/ResourceOwner" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/tasks/{taskID}/owners/{userID}': + delete: + operationId: DeleteTasksIDOwnersID + tags: + - Users + - Tasks + summary: Remove an owner from a task + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: userID + schema: + type: string + required: true + description: The ID of the owner to remove. + - in: path + name: taskID + schema: + type: string + required: true + description: The task ID. + responses: + '204': + description: Owner removed + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /users: + get: + operationId: GetUsers + tags: + - Users + summary: List all users + parameters: + - $ref: '#/components/parameters/TraceSpan' + responses: + '200': + description: A list of users + content: + application/json: + schema: + $ref: "#/components/schemas/Users" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostUsers + tags: + - Users + summary: Create a user + parameters: + - $ref: '#/components/parameters/TraceSpan' + requestBody: + description: User to create + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/User" + responses: + '201': + description: User created + content: + application/json: + schema: + $ref: "#/components/schemas/User" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/users/{userID}': + get: + operationId: GetUsersID + tags: + - Users + summary: Retrieve a user + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: userID + schema: + type: string + required: true + description: The user ID. + responses: + '200': + description: User details + content: + application/json: + schema: + $ref: "#/components/schemas/User" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + patch: + operationId: PatchUsersID + tags: + - Users + summary: Update a user + requestBody: + description: User update to apply + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/User" + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: userID + schema: + type: string + required: true + description: The ID of the user to update. + responses: + '200': + description: User updated + content: + application/json: + schema: + $ref: "#/components/schemas/User" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + delete: + operationId: DeleteUsersID + tags: + - Users + summary: Delete a user + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: userID + schema: + type: string + required: true + description: The ID of the user to delete. + responses: + '204': + description: User deleted + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/users/{userID}/password': + put: + operationId: PutUsersIDPassword + tags: + - Users + summary: Update a password + security: + - BasicAuth: [] + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: userID + schema: + type: string + required: true + description: The user ID. + requestBody: + description: New password + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/PasswordResetBody" + responses: + '204': + description: Password successfully updated + default: + description: Unsuccessful authentication + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/users/{userID}/logs': + get: + operationId: GetUsersIDLogs + tags: + - Users + - OperationLogs + summary: Retrieve operation logs for a user + parameters: + - $ref: '#/components/parameters/TraceSpan' + - $ref: '#/components/parameters/Offset' + - $ref: '#/components/parameters/Limit' + - in: path + name: userID + required: true + description: The user ID. + schema: + type: string + responses: + '200': + description: Operation logs for the user + content: + application/json: + schema: + $ref: "#/components/schemas/OperationLogs" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /checks: + get: + operationId: GetChecks + tags: + - Checks + summary: Get all checks + parameters: + - $ref: '#/components/parameters/TraceSpan' + - $ref: '#/components/parameters/Offset' + - $ref: '#/components/parameters/Limit' + - in: query + name: orgID + required: true + description: Only show checks that belong to a specific organization ID. + schema: + type: string + responses: + '200': + description: A list of checks + content: + application/json: + schema: + $ref: "#/components/schemas/Checks" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: CreateCheck + tags: + - Checks + summary: Add new check + requestBody: + description: Check to create + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/Check" + responses: + '201': + description: Check created + content: + application/json: + schema: + $ref: "#/components/schemas/Check" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/checks/{checkID}': + get: + operationId: GetChecksID + tags: + - Checks + summary: Get a check + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: checkID + schema: + type: string + required: true + description: The check ID. + responses: + '200': + description: The check requested + content: + application/json: + schema: + $ref: "#/components/schemas/Check" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + put: + operationId: PutChecksID + tags: + - Checks + summary: Update a check + requestBody: + description: Check update to apply + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/Check" + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: checkID + schema: + type: string + required: true + description: The check ID. + responses: + '200': + description: An updated check + content: + application/json: + schema: + $ref: "#/components/schemas/Check" + '404': + description: The check was not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + patch: + operationId: PatchChecksID + tags: + - Checks + summary: Update a check + requestBody: + description: Check update to apply + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CheckPatch" + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: checkID + schema: + type: string + required: true + description: The check ID. + responses: + '200': + description: An updated check + content: + application/json: + schema: + $ref: "#/components/schemas/Check" + '404': + description: The check was not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + delete: + operationId: DeleteChecksID + tags: + - Checks + summary: Delete a check + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: checkID + schema: + type: string + required: true + description: The check ID. + responses: + '204': + description: Delete has been accepted + '404': + description: The check was not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/checks/{checkID}/labels': + get: + operationId: GetChecksIDLabels + tags: + - Checks + summary: List all labels for a check + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: checkID + schema: + type: string + required: true + description: The check ID. + responses: + '200': + description: A list of all labels for a check + content: + application/json: + schema: + $ref: "#/components/schemas/LabelsResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostChecksIDLabels + tags: + - Checks + summary: Add a label to a check + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: checkID + schema: + type: string + required: true + description: The check ID. + requestBody: + description: Label to add + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/LabelMapping" + responses: + '201': + description: The label was added to the check + content: + application/json: + schema: + $ref: "#/components/schemas/LabelResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/checks/{checkID}/labels/{labelID}': + delete: + operationId: DeleteChecksIDLabelsID + tags: + - Checks + summary: Delete label from a check + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: checkID + schema: + type: string + required: true + description: The check ID. + - in: path + name: labelID + schema: + type: string + required: true + description: The ID of the label to delete. + responses: + '204': + description: Delete has been accepted + '404': + description: Check or label not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /notificationRules: + get: + operationId: GetNotificationRules + tags: + - NotificationRules + summary: Get all notification rules + parameters: + - $ref: '#/components/parameters/TraceSpan' + - $ref: '#/components/parameters/Offset' + - $ref: '#/components/parameters/Limit' + - in: query + name: orgID + required: true + description: Only show notification rules that belong to a specific organization ID. + schema: + type: string + - in: query + name: checkID + description: Only show notifications that belong to the specific check ID. + schema: + type: string + - in: query + name: tag + description: Only show notification rules that match a tag pair. Uses `AND` to specify multiple tags. + schema: + type: string + pattern: ^[a-zA-Z0-9_]+:[a-zA-Z0-9_]+$ + example: env:prod + responses: + '200': + description: A list of notification rules + content: + application/json: + schema: + $ref: "#/components/schemas/NotificationRules" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: CreateNotificationRule + tags: + - NotificationRules + summary: Add a notification rule + requestBody: + description: Notification rule to create + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/NotificationRule" + responses: + '201': + description: Notification rule created + content: + application/json: + schema: + $ref: "#/components/schemas/NotificationRule" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/checks/{checkID}/query': + get: + operationId: GetChecksIDQuery + tags: + - Checks + summary: Get a check query + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: checkID + schema: + type: string + required: true + description: The check ID. + responses: + '200': + description: The check query requested + content: + application/json: + schema: + $ref: "#/components/schemas/FluxResponse" + '400': + description: Invalid request + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '404': + description: Check not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/notificationRules/{ruleID}': + get: + operationId: GetNotificationRulesID + tags: + - NotificationRules + summary: Get a notification rule + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: ruleID + schema: + type: string + required: true + description: The notification rule ID. + responses: + '200': + description: The notification rule requested + content: + application/json: + schema: + $ref: "#/components/schemas/NotificationRule" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + put: + operationId: PutNotificationRulesID + tags: + - NotificationRules + summary: Update a notification rule + requestBody: + description: Notification rule update to apply + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/NotificationRule" + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: ruleID + schema: + type: string + required: true + description: The notification rule ID. + responses: + '200': + description: An updated notification rule + content: + application/json: + schema: + $ref: "#/components/schemas/NotificationRule" + '404': + description: The notification rule was not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + patch: + operationId: PatchNotificationRulesID + tags: + - NotificationRules + summary: Update a notification rule + requestBody: + description: Notification rule update to apply + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/NotificationRuleUpdate" + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: ruleID + schema: + type: string + required: true + description: The notification rule ID. + responses: + '200': + description: An updated notification rule + content: + application/json: + schema: + $ref: "#/components/schemas/NotificationRule" + '404': + description: The notification rule was not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + delete: + operationId: DeleteNotificationRulesID + tags: + - NotificationRules + summary: Delete a notification rule + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: ruleID + schema: + type: string + required: true + description: The notification rule ID. + responses: + '204': + description: Delete has been accepted + '404': + description: The check was not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/notificationRules/{ruleID}/labels': + get: + operationId: GetNotificationRulesIDLabels + tags: + - NotificationRules + summary: List all labels for a notification rule + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: ruleID + schema: + type: string + required: true + description: The notification rule ID. + responses: + '200': + description: A list of all labels for a notification rule + content: + application/json: + schema: + $ref: "#/components/schemas/LabelsResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostNotificationRuleIDLabels + tags: + - NotificationRules + summary: Add a label to a notification rule + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: ruleID + schema: + type: string + required: true + description: The notification rule ID. + requestBody: + description: Label to add + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/LabelMapping" + responses: + '201': + description: The label was added to the notification rule + content: + application/json: + schema: + $ref: "#/components/schemas/LabelResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/notificationRules/{ruleID}/labels/{labelID}': + delete: + operationId: DeleteNotificationRulesIDLabelsID + tags: + - NotificationRules + summary: Delete label from a notification rule + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: ruleID + schema: + type: string + required: true + description: The notification rule ID. + - in: path + name: labelID + schema: + type: string + required: true + description: The ID of the label to delete. + responses: + '204': + description: Delete has been accepted + '404': + description: Rule or label not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/notificationRules/{ruleID}/query': + get: + operationId: GetNotificationRulesIDQuery + tags: + - Rules + summary: Get a notification rule query + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: ruleID + schema: + type: string + required: true + description: The notification rule ID. + responses: + '200': + description: The notification rule query requested + content: + application/json: + schema: + $ref: "#/components/schemas/FluxResponse" + '400': + description: Invalid request + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '404': + description: Notification rule not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /notificationEndpoints: + get: + operationId: GetNotificationEndpoints + tags: + - NotificationEndpoints + summary: Get all notification endpoints + parameters: + - $ref: '#/components/parameters/TraceSpan' + - $ref: '#/components/parameters/Offset' + - $ref: '#/components/parameters/Limit' + - in: query + name: orgID + required: true + description: Only show notification endpoints that belong to specific organization ID. + schema: + type: string + responses: + '200': + description: A list of notification endpoints + content: + application/json: + schema: + $ref: "#/components/schemas/NotificationEndpoints" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: CreateNotificationEndpoint + tags: + - NotificationEndpoints + summary: Add a notification endpoint + requestBody: + description: Notification endpoint to create + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/NotificationEndpoint" + responses: + '201': + description: Notification endpoint created + content: + application/json: + schema: + $ref: "#/components/schemas/NotificationEndpoint" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/notificationEndpoints/{endpointID}': + get: + operationId: GetNotificationEndpointsID + tags: + - NotificationEndpoints + summary: Get a notification endpoint + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: endpointID + schema: + type: string + required: true + description: The notification endpoint ID. + responses: + '200': + description: The notification endpoint requested + content: + application/json: + schema: + $ref: "#/components/schemas/NotificationEndpoint" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + put: + operationId: PutNotificationEndpointsID + tags: + - NotificationEndpoints + summary: Update a notification endpoint + requestBody: + description: A new notification endpoint to replace the existing endpoint with + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/NotificationEndpoint" + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: endpointID + schema: + type: string + required: true + description: The notification endpoint ID. + responses: + '200': + description: An updated notification endpoint + content: + application/json: + schema: + $ref: "#/components/schemas/NotificationEndpoint" + '404': + description: The notification endpoint was not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + patch: + operationId: PatchNotificationEndpointsID + tags: + - NotificationEndpoints + summary: Update a notification endpoint + requestBody: + description: Check update to apply + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/NotificationEndpointUpdate" + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: endpointID + schema: + type: string + required: true + description: The notification endpoint ID. + responses: + '200': + description: An updated notification endpoint + content: + application/json: + schema: + $ref: "#/components/schemas/NotificationEndpoint" + '404': + description: The notification endpoint was not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + delete: + operationId: DeleteNotificationEndpointsID + tags: + - NotificationEndpoints + summary: Delete a notification endpoint + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: endpointID + schema: + type: string + required: true + description: The notification endpoint ID. + responses: + '204': + description: Delete has been accepted + '404': + description: The endpoint was not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/notificationEndpoints/{endpointID}/labels': + get: + operationId: GetNotificationEndpointsIDLabels + tags: + - NotificationEndpoints + summary: List all labels for a notification endpoint + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: endpointID + schema: + type: string + required: true + description: The notification endpoint ID. + responses: + '200': + description: A list of all labels for a notification endpoint + content: + application/json: + schema: + $ref: "#/components/schemas/LabelsResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + operationId: PostNotificationEndpointIDLabels + tags: + - NotificationEndpoints + summary: Add a label to a notification endpoint + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: endpointID + schema: + type: string + required: true + description: The notification endpoint ID. + requestBody: + description: Label to add + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/LabelMapping" + responses: + '201': + description: The label was added to the notification endpoint + content: + application/json: + schema: + $ref: "#/components/schemas/LabelResponse" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + '/notificationEndpoints/{endpointID}/labels/{labelID}': + delete: + operationId: DeleteNotificationEndpointsIDLabelsID + tags: + - NotificationEndpoints + summary: Delete a label from a notification endpoint + parameters: + - $ref: '#/components/parameters/TraceSpan' + - in: path + name: endpointID + schema: + type: string + required: true + description: The notification endpoint ID. + - in: path + name: labelID + schema: + type: string + required: true + description: The ID of the label to delete. + responses: + '204': + description: Delete has been accepted + '404': + description: Endpoint or label not found + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + default: + description: Unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" +components: + parameters: + Offset: + in: query + name: offset + required: false + schema: + type: integer + minimum: 0 + Limit: + in: query + name: limit + required: false + schema: + type: integer + minimum: 1 + maximum: 100 + default: 20 + Descending: + in: query + name: descending + required: false + schema: + type: boolean + default: false + SortBy: + in: query + name: sortBy + required: false + schema: + type: string + TraceSpan: + in: header + name: Zap-Trace-Span + description: OpenTracing span context + example: + trace_id: '1' + span_id: '1' + baggage: + key: value + required: false + schema: + type: string + schemas: + LanguageRequest: + description: Flux query to be analyzed. + type: object + required: + - query + properties: + query: + description: Flux query script to be analyzed + type: string + Query: + description: Query influx with specific return formatting. + type: object + required: + - query + properties: + extern: + $ref: "#/components/schemas/File" + query: + description: Query script to execute. + type: string + type: + description: The type of query. + type: string + default: flux + enum: + - flux + - influxql + db: + description: Required for `influxql` type queries. + type: string + rp: + description: Required for `influxql` type queries. + type: string + cluster: + description: Required for `influxql` type queries. + type: string + dialect: + $ref: "#/components/schemas/Dialect" + Package: + description: Represents a complete package source tree. + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + path: + description: Package import path + type: string + package: + description: Package name + type: string + files: + description: Package files + type: array + items: + $ref: "#/components/schemas/File" + File: + description: Represents a source from a single file + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + name: + description: The name of the file. + type: string + package: + $ref: "#/components/schemas/PackageClause" + imports: + description: A list of package imports + type: array + items: + $ref: "#/components/schemas/ImportDeclaration" + body: + description: List of Flux statements + type: array + items: + $ref: "#/components/schemas/Statement" + PackageClause: + description: Defines a package identifier + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + name: + $ref: "#/components/schemas/Identifier" + ImportDeclaration: + description: Declares a package import + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + as: + $ref: "#/components/schemas/Identifier" + path: + $ref: "#/components/schemas/StringLiteral" + Node: + oneOf: + - $ref: "#/components/schemas/Expression" + - $ref: "#/components/schemas/Block" + Block: + description: A set of statements + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + body: + description: Block body + type: array + items: + $ref: "#/components/schemas/Statement" + Statement: + oneOf: + - $ref: "#/components/schemas/BadStatement" + - $ref: "#/components/schemas/VariableAssignment" + - $ref: "#/components/schemas/MemberAssignment" + - $ref: "#/components/schemas/ExpressionStatement" + - $ref: "#/components/schemas/ReturnStatement" + - $ref: "#/components/schemas/OptionStatement" + - $ref: "#/components/schemas/BuiltinStatement" + - $ref: "#/components/schemas/TestStatement" + BadStatement: + description: A placeholder for statements for which no correct statement nodes can be created + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + text: + description: Raw source text + type: string + VariableAssignment: + description: Represents the declaration of a variable + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + id: + $ref: "#/components/schemas/Identifier" + init: + $ref: "#/components/schemas/Expression" + MemberAssignment: + description: Object property assignment + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + member: + $ref: "#/components/schemas/MemberExpression" + init: + $ref: "#/components/schemas/Expression" + ExpressionStatement: + description: May consist of an expression that does not return a value and is executed solely for its side-effects + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + expression: + $ref: "#/components/schemas/Expression" + ReturnStatement: + description: Defines an expression to return + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + argument: + $ref: "#/components/schemas/Expression" + OptionStatement: + description: A single variable declaration + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + assignment: + oneOf: + - $ref: "#/components/schemas/VariableAssignment" + - $ref: "#/components/schemas/MemberAssignment" + BuiltinStatement: + description: Declares a builtin identifier and its type + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + id: + $ref: "#/components/schemas/Identifier" + TestStatement: + description: Declares a Flux test case + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + assignment: + $ref: "#/components/schemas/VariableAssignment" + Expression: + oneOf: + - $ref: "#/components/schemas/ArrayExpression" + - $ref: "#/components/schemas/FunctionExpression" + - $ref: "#/components/schemas/BinaryExpression" + - $ref: "#/components/schemas/CallExpression" + - $ref: "#/components/schemas/ConditionalExpression" + - $ref: "#/components/schemas/LogicalExpression" + - $ref: "#/components/schemas/MemberExpression" + - $ref: "#/components/schemas/IndexExpression" + - $ref: "#/components/schemas/ObjectExpression" + - $ref: "#/components/schemas/ParenExpression" + - $ref: "#/components/schemas/PipeExpression" + - $ref: "#/components/schemas/UnaryExpression" + - $ref: "#/components/schemas/BooleanLiteral" + - $ref: "#/components/schemas/DateTimeLiteral" + - $ref: "#/components/schemas/DurationLiteral" + - $ref: "#/components/schemas/FloatLiteral" + - $ref: "#/components/schemas/IntegerLiteral" + - $ref: "#/components/schemas/PipeLiteral" + - $ref: "#/components/schemas/RegexpLiteral" + - $ref: "#/components/schemas/StringLiteral" + - $ref: "#/components/schemas/UnsignedIntegerLiteral" + - $ref: "#/components/schemas/Identifier" + ArrayExpression: + description: Used to create and directly specify the elements of an array object + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + elements: + description: Elements of the array + type: array + items: + $ref: "#/components/schemas/Expression" + FunctionExpression: + description: Function expression + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + params: + description: Function parameters + type: array + items: + $ref: "#/components/schemas/Property" + body: + $ref: "#/components/schemas/Node" + BinaryExpression: + description: uses binary operators to act on two operands in an expression + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + operator: + type: string + left: + $ref: "#/components/schemas/Expression" + right: + $ref: "#/components/schemas/Expression" + CallExpression: + description: Represents a function call + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + callee: + $ref: "#/components/schemas/Expression" + arguments: + description: Function arguments + type: array + items: + $ref: "#/components/schemas/Expression" + ConditionalExpression: + description: Selects one of two expressions, `Alternate` or `Consequent`, depending on a third boolean expression, `Test` + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + test: + $ref: "#/components/schemas/Expression" + alternate: + $ref: "#/components/schemas/Expression" + consequent: + $ref: "#/components/schemas/Expression" + LogicalExpression: + description: Represents the rule conditions that collectively evaluate to either true or false + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + operator: + type: string + left: + $ref: "#/components/schemas/Expression" + right: + $ref: "#/components/schemas/Expression" + MemberExpression: + description: Represents accessing a property of an object + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + object: + $ref: "#/components/schemas/Expression" + property: + $ref: "#/components/schemas/PropertyKey" + IndexExpression: + description: Represents indexing into an array + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + array: + $ref: "#/components/schemas/Expression" + index: + $ref: "#/components/schemas/Expression" + ObjectExpression: + description: Allows the declaration of an anonymous object within a declaration + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + properties: + description: Object properties + type: array + items: + $ref: "#/components/schemas/Property" + ParenExpression: + description: Represents an expression wrapped in parenthesis + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + expression: + $ref: "#/components/schemas/Expression" + PipeExpression: + description: Call expression with pipe argument + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + argument: + $ref: "#/components/schemas/Expression" + call: + $ref: "#/components/schemas/CallExpression" + UnaryExpression: + description: Uses operators to act on a single operand in an expression + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + operator: + type: string + argument: + $ref: "#/components/schemas/Expression" + BooleanLiteral: + description: Represents boolean values + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + value: + type: boolean + DateTimeLiteral: + description: Represents an instant in time with nanosecond precision using the syntax of golang's RFC3339 Nanosecond variant + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + value: + type: string + DurationLiteral: + description: Represents the elapsed time between two instants as an int64 nanosecond count with syntax of golang's time.Duration + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + values: + description: Duration values + type: array + items: + $ref: "#/components/schemas/Duration" + FloatLiteral: + description: Represents floating point numbers according to the double representations defined by the IEEE-754-1985 + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + value: + type: number + IntegerLiteral: + description: Represents integer numbers + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + value: + type: string + PipeLiteral: + description: Represents a specialized literal value, indicating the left hand value of a pipe expression + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + RegexpLiteral: + description: Expressions begin and end with `/` and are regular expressions with syntax accepted by RE2 + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + value: + type: string + StringLiteral: + description: Expressions begin and end with double quote marks + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + value: + type: string + UnsignedIntegerLiteral: + description: Represents integer numbers + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + value: + type: string + Duration: + description: A pair consisting of length of time and the unit of time measured. It is the atomic unit from which all duration literals are composed. + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + magnitude: + type: integer + unit: + type: string + Property: + description: The value associated with a key + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + key: + $ref: "#/components/schemas/PropertyKey" + value: + $ref: "#/components/schemas/Expression" + PropertyKey: + oneOf: + - $ref: "#/components/schemas/Identifier" + - $ref: "#/components/schemas/StringLiteral" + Identifier: + description: A valid Flux identifier + type: object + properties: + type: + $ref: "#/components/schemas/NodeType" + name: + type: string + NodeType: + description: Type of AST node + type: string + Dialect: + description: Dialect are options to change the default CSV output format; https://www.w3.org/TR/2015/REC-tabular-metadata-20151217/#dialect-descriptions + type: object + properties: + header: + description: If true, the results will contain a header row + type: boolean + default: true + delimiter: + description: Separator between cells; the default is , + type: string + default: "," + maxLength: 1 + minLength: 1 + annotations: + description: Https://www.w3.org/TR/2015/REC-tabular-data-model-20151217/#columns + type: array + items: + type: string + enum: + - "group" + - "datatype" + - "default" + uniqueItems: true + commentPrefix: + description: Character prefixed to comment strings + type: string + default: "#" + maxLength: 1 + minLength: 0 + dateTimeFormat: + description: Format of timestamps + type: string + default: "RFC3339" + enum: + - RFC3339 + - RFC3339Nano + Permission: + required: [action, resource] + properties: + action: + type: string + enum: + - read + - write + resource: + type: object + required: [type] + properties: + type: + type: string + enum: + - authorizations + - buckets + - dashboards + - orgs + - sources + - tasks + - telegrafs + - users + - variables + - scrapers + - secrets + - labels + - views + - documents + - notificationRules + - notificationEndpoints + - checks + id: + type: string + nullable: true + description: If ID is set that is a permission for a specific resource. if it is not set it is a permission for all resources of that resource type. + name: + type: string + nullable: true + description: Optional name of the resource if the resource has a name field. + orgID: + type: string + nullable: true + description: If orgID is set that is a permission for all resources owned my that org. if it is not set it is a permission for all resources of that resource type. + org: + type: string + nullable: true + description: Optional name of the organization of the organization with orgID. + AuthorizationUpdateRequest: + properties: + status: + description: If inactive the token is inactive and requests using the token will be rejected. + default: active + type: string + enum: + - active + - inactive + description: + type: string + description: A description of the token. + Authorization: + required: [orgID, permissions] + allOf: + - $ref: "#/components/schemas/AuthorizationUpdateRequest" + - type: object + properties: + orgID: + type: string + description: ID of org that authorization is scoped to. + permissions: + type: array + minLength: 1 + description: List of permissions for an auth. An auth must have at least one Permission. + items: + $ref: "#/components/schemas/Permission" + id: + readOnly: true + type: string + token: + readOnly: true + type: string + description: Passed via the Authorization Header and Token Authentication type. + userID: + readOnly: true + type: string + description: ID of user that created and owns the token. + user: + readOnly: true + type: string + description: Name of user that created and owns the token. + org: + readOnly: true + type: string + description: Name of the org token is scoped to. + links: + type: object + readOnly: true + example: + self: "/api/v2/authorizations/1" + user: "/api/v2/users/12" + properties: + self: + readOnly: true + $ref: "#/components/schemas/Link" + user: + readOnly: true + $ref: "#/components/schemas/Link" + Authorizations: + type: object + properties: + links: + readOnly: true + $ref: "#/components/schemas/Links" + authorizations: + type: array + items: + $ref: "#/components/schemas/Authorization" + Bucket: + properties: + links: + type: object + readOnly: true + example: + labels: "/api/v2/buckets/1/labels" + logs: "/api/v2/buckets/1/logs" + members: "/api/v2/buckets/1/members" + org: "/api/v2/orgs/2" + owners: "/api/v2/buckets/1/owners" + self: "/api/v2/buckets/1" + write: "/api/v2/write?org=2&bucket=1" + properties: + labels: + description: URL to retrieve labels for this bucket + $ref: "#/components/schemas/Link" + logs: + description: URL to retrieve operation logs for this bucket + $ref: "#/components/schemas/Link" + members: + description: URL to retrieve members that can read this bucket + $ref: "#/components/schemas/Link" + org: + description: URL to retrieve parent organization for this bucket + $ref: "#/components/schemas/Link" + owners: + description: URL to retrieve owners that can read and write to this bucket. + $ref: "#/components/schemas/Link" + self: + description: URL for this bucket + $ref: "#/components/schemas/Link" + write: + description: URL to write line protocol for this bucket + $ref: "#/components/schemas/Link" + id: + readOnly: true + type: string + type: + readOnly: true + type: string + default: user + enum: + - user + - system + name: + type: string + description: + type: string + orgID: + type: string + rp: + type: string + createdAt: + type: string + format: date-time + readOnly: true + updatedAt: + type: string + format: date-time + readOnly: true + retentionRules: + type: array + description: Rules to expire or retain data. No rules means data never expires. + items: + type: object + properties: + type: + type: string + default: expire + enum: + - expire + everySeconds: + type: integer + description: Duration in seconds for how long data will be kept in the database. + example: 86400 + minimum: 1 + required: [type, everySeconds] + labels: + $ref: "#/components/schemas/Labels" + required: [name, retentionRules] + Buckets: + type: object + properties: + links: + readOnly: true + $ref: "#/components/schemas/Links" + buckets: + type: array + items: + $ref: "#/components/schemas/Bucket" + Link: + type: string + format: uri + readOnly: true + description: URI of resource. + Links: + type: object + properties: + next: + $ref: "#/components/schemas/Link" + self: + $ref: "#/components/schemas/Link" + prev: + $ref: "#/components/schemas/Link" + required: [self] + Logs: + type: object + properties: + events: + readOnly: true + type: array + items: + $ref: "#/components/schemas/LogEvent" + LogEvent: + type: object + properties: + time: + readOnly: true + description: Time event occurred, RFC3339Nano. + type: string + format: date-time + message: + readOnly: true + description: A description of the event that occurred. + type: string + example: Halt and catch fire + OperationLog: + type: object + readOnly: true + properties: + description: + type: string + description: A description of the event that occurred. + example: Bucket Created + time: + type: string + description: Time event occurred, RFC3339Nano. + format: date-time + userID: + type: string + description: ID of the user who operated the event. + links: + type: object + properties: + user: + $ref: "#/components/schemas/Link" + OperationLogs: + type: object + properties: + logs: + type: array + items: + $ref: "#/components/schemas/OperationLog" + links: + $ref: "#/components/schemas/Links" + Organization: + properties: + links: + type: object + readOnly: true + example: + self: "/api/v2/orgs/1" + members: "/api/v2/orgs/1/members" + owners: "/api/v2/orgs/1/owners" + labels: "/api/v2/orgs/1/labels" + secrets: "/api/v2/orgs/1/secrets" + buckets: "/api/v2/buckets?org=myorg" + tasks: "/api/v2/tasks?org=myorg" + dashboards: "/api/v2/dashboards?org=myorg" + logs: "/api/v2/orgs/1/logs" + properties: + self: + $ref: "#/components/schemas/Link" + members: + $ref: "#/components/schemas/Link" + owners: + $ref: "#/components/schemas/Link" + labels: + $ref: "#/components/schemas/Link" + secrets: + $ref: "#/components/schemas/Link" + buckets: + $ref: "#/components/schemas/Link" + tasks: + $ref: "#/components/schemas/Link" + dashboards: + $ref: "#/components/schemas/Link" + logs: + $ref: "#/components/schemas/Link" + id: + readOnly: true + type: string + name: + type: string + description: + type: string + createdAt: + type: string + format: date-time + readOnly: true + updatedAt: + type: string + format: date-time + readOnly: true + status: + description: If inactive the organization is inactive. + default: active + type: string + enum: + - active + - inactive + required: [name] + Organizations: + type: object + properties: + links: + $ref: "#/components/schemas/Links" + orgs: + type: array + items: + $ref: "#/components/schemas/Organization" + Runs: + type: object + properties: + links: + readOnly: true + $ref: "#/components/schemas/Links" + runs: + type: array + items: + $ref: "#/components/schemas/Run" + Run: + properties: + id: + readOnly: true + type: string + taskID: + readOnly: true + type: string + status: + readOnly: true + type: string + enum: + - scheduled + - started + - failed + - success + - canceled + scheduledFor: + description: Time used for run's "now" option, RFC3339. + type: string + format: date-time + log: + description: An array of logs associated with the run. + type: array + readOnly: true + items: + type: object + properties: + runID: + type: string + time: + type: string + message: + type: string + startedAt: + readOnly: true + description: Time run started executing, RFC3339Nano. + type: string + format: date-time + finishedAt: + readOnly: true + description: Time run finished executing, RFC3339Nano. + type: string + format: date-time + requestedAt: + readOnly: true + description: Time run was manually requested, RFC3339Nano. + type: string + format: date-time + links: + type: object + readOnly: true + example: + self: "/api/v2/tasks/1/runs/1" + task: "/api/v2/tasks/1" + retry: "/api/v2/tasks/1/runs/1/retry" + logs: "/api/v2/tasks/1/runs/1/logs" + properties: + self: + type: string + format: uri + task: + type: string + format: uri + logs: + type: string + format: uri + retry: + type: string + format: uri + RunManually: + properties: + scheduledFor: + nullable: true + description: Time used for run's "now" option, RFC3339. Default is the server's now time. + type: string + format: date-time + Tasks: + type: object + properties: + links: + readOnly: true + $ref: "#/components/schemas/Links" + tasks: + type: array + items: + $ref: "#/components/schemas/Task" + Task: + type: object + properties: + id: + readOnly: true + type: string + type: + description: The type of task, this can be used for filtering tasks on list actions. + type: string + orgID: + description: The ID of the organization that owns this Task. + type: string + org: + description: The name of the organization that owns this Task. + type: string + name: + description: The name of the task. + type: string + description: + description: An optional description of the task. + type: string + status: + $ref: "#/components/schemas/TaskStatusType" + labels: + $ref: "#/components/schemas/Labels" + authorizationID: + description: The ID of the authorization used when this task communicates with the query engine. + type: string + flux: + description: The Flux script to run for this task. + type: string + every: + description: A simple task repetition schedule; parsed from Flux. + type: string + cron: + description: A task repetition schedule in the form '* * * * * *'; parsed from Flux. + type: string + offset: + description: Duration to delay after the schedule, before executing the task; parsed from flux, if set to zero it will remove this option and use 0 as the default. + type: string + latestCompleted: + description: Timestamp of latest scheduled, completed run, RFC3339. + type: string + format: date-time + readOnly: true + createdAt: + type: string + format: date-time + readOnly: true + updatedAt: + type: string + format: date-time + readOnly: true + links: + type: object + readOnly: true + example: + self: "/api/v2/tasks/1" + owners: "/api/v2/tasks/1/owners" + members: "/api/v2/tasks/1/members" + labels: "/api/v2/tasks/1/labels" + runs: "/api/v2/tasks/1/runs" + logs: "/api/v2/tasks/1/logs" + properties: + self: + $ref: "#/components/schemas/Link" + owners: + $ref: "#/components/schemas/Link" + members: + $ref: "#/components/schemas/Link" + runs: + $ref: "#/components/schemas/Link" + logs: + $ref: "#/components/schemas/Link" + labels: + $ref: "#/components/schemas/Link" + required: [id, name, orgID, flux] + TaskStatusType: + type: string + enum: [active, inactive] + User: + properties: + id: + readOnly: true + type: string + oauthID: + type: string + name: + type: string + status: + description: If inactive the user is inactive. + default: active + type: string + enum: + - active + - inactive + links: + type: object + readOnly: true + example: + self: "/api/v2/users/1" + logs: "/api/v2/users/1/logs" + properties: + self: + type: string + format: uri + logs: + type: string + format: uri + required: [name] + Users: + type: object + properties: + links: + type: object + properties: + self: + type: string + format: uri + users: + type: array + items: + $ref: "#/components/schemas/User" + ResourceMember: + allOf: + - $ref: "#/components/schemas/User" + - type: object + properties: + role: + type: string + default: member + enum: + - member + ResourceMembers: + type: object + properties: + links: + type: object + properties: + self: + type: string + format: uri + users: + type: array + items: + $ref: "#/components/schemas/ResourceMember" + ResourceOwner: + allOf: + - $ref: "#/components/schemas/User" + - type: object + properties: + role: + type: string + default: owner + enum: + - owner + ResourceOwners: + type: object + properties: + links: + type: object + properties: + self: + type: string + format: uri + users: + type: array + items: + $ref: "#/components/schemas/ResourceOwner" + FluxSuggestions: + type: object + properties: + funcs: + type: array + items: + $ref: "#/components/schemas/FluxSuggestion" + FluxSuggestion: + type: object + properties: + name: + type: string + params: + type: object + additionalProperties: + type: string + Routes: + properties: + authorizations: + type: string + format: uri + buckets: + type: string + format: uri + dashboards: + type: string + format: uri + external: + type: object + properties: + statusFeed: + type: string + format: uri + variables: + type: string + format: uri + me: + type: string + format: uri + orgs: + type: string + format: uri + query: + type: object + properties: + self: + type: string + format: uri + ast: + type: string + format: uri + analyze: + type: string + format: uri + suggestions: + type: string + format: uri + setup: + type: string + format: uri + signin: + type: string + format: uri + signout: + type: string + format: uri + sources: + type: string + format: uri + system: + type: object + properties: + metrics: + type: string + format: uri + debug: + type: string + format: uri + health: + type: string + format: uri + tasks: + type: string + format: uri + telegrafs: + type: string + format: uri + users: + type: string + format: uri + write: + type: string + format: uri + Error: + properties: + code: + description: Code is the machine-readable error code. + readOnly: true + type: string + # This set of enumerations must remain in sync with the constants defined in errors.go + enum: + - internal error + - not found + - conflict + - invalid + - unprocessable entity + - empty value + - unavailable + - forbidden + - too many requests + - unauthorized + - method not allowed + message: + readOnly: true + description: Message is a human-readable message. + type: string + required: [code, message] + LineProtocolError: + properties: + code: + description: Code is the machine-readable error code. + readOnly: true + type: string + enum: + - internal error + - not found + - conflict + - invalid + - empty value + - unavailable + message: + readOnly: true + description: Message is a human-readable message. + type: string + op: + readOnly: true + description: Op describes the logical code operation during error. Useful for debugging. + type: string + err: + readOnly: true + description: Err is a stack of errors that occurred during processing of the request. Useful for debugging. + type: string + line: + readOnly: true + description: First line within sent body containing malformed data + type: integer + format: int32 + required: [code, message, op, err] + LineProtocolLengthError: + properties: + code: + description: Code is the machine-readable error code. + readOnly: true + type: string + enum: + - invalid + message: + readOnly: true + description: Message is a human-readable message. + type: string + maxLength: + readOnly: true + description: Max length in bytes for a body of line-protocol. + type: integer + format: int32 + required: [code, message, maxLength] + Field: + type: object + properties: + value: + description: >- + value is the value of the field. Meaning of the value is implied by + the `type` key + type: string + type: + description: >- + `type` describes the field type. `func` is a function. `field` is a field reference. + type: string + enum: + - func + - field + - integer + - number + - regex + - wildcard + alias: + description: >- + Alias overrides the field name in the returned response. Applies only + if type is `func` + type: string + args: + description: Args are the arguments to the function + type: array + items: + $ref: '#/components/schemas/Field' + BuilderConfig: + type: object + properties: + buckets: + type: array + items: + type: string + tags: + type: array + items: + $ref: '#/components/schemas/BuilderTagsType' + functions: + type: array + items: + $ref: '#/components/schemas/BuilderFunctionsType' + aggregateWindow: + type: object + properties: + period: + type: string + BuilderTagsType: + type: object + properties: + key: + type: string + values: + type: array + items: + type: string + BuilderFunctionsType: + type: object + properties: + name: + type: string + DashboardQuery: + type: object + properties: + text: + type: string + description: The text of the Flux query. + editMode: + $ref: '#/components/schemas/QueryEditMode' + name: + type: string + builderConfig: + $ref: '#/components/schemas/BuilderConfig' + QueryEditMode: + type: string + enum: ['builder', 'advanced'] + Axis: + type: object + description: The description of a particular axis for a visualization. + properties: + bounds: + type: array + minItems: 0 + maxItems: 2 + description: >- + The extents of an axis in the form [lower, upper]. Clients determine + whether bounds are to be inclusive or exclusive of their limits + items: + type: string + label: + description: Label is a description of this Axis + type: string + prefix: + description: Prefix represents a label prefix for formatting axis values. + type: string + suffix: + description: Suffix represents a label suffix for formatting axis values. + type: string + base: + description: Base represents the radix for formatting axis values. + type: string + enum: ['', '2', '10'] + scale: + $ref: '#/components/schemas/AxisScale' + AxisScale: + description: 'Scale is the axis formatting scale. Supported: "log", "linear"' + type: string + enum: ['log', 'linear'] + DashboardColor: + type: object + description: Defines an encoding of data value into color space. + required: [id, type, hex, name, value] + properties: + id: + description: The unique ID of the view color. + type: string + type: + description: Type is how the color is used. + type: string + enum: + - min + - max + - threshold + - scale + - text + - background + hex: + description: The hex number of the color + type: string + maxLength: 7 + minLength: 7 + name: + description: The user-facing name of the hex color. + type: string + value: + description: The data value mapped to this color. + type: number + format: float + RenamableField: + description: Describes a field that can be renamed and made visible or invisible. + type: object + properties: + internalName: + description: The calculated name of a field. + readOnly: true + type: string + displayName: + description: The name that a field is renamed to by the user. + type: string + visible: + description: Indicates whether this field should be visible on the table. + type: boolean + XYViewProperties: + type: object + required: + - type + - geom + - queries + - shape + - axes + - colors + - legend + - note + - showNoteWhenEmpty + properties: + type: + type: string + enum: [xy] + queries: + type: array + items: + $ref: "#/components/schemas/DashboardQuery" + colors: + description: Colors define color encoding of data into a visualization + type: array + items: + $ref: "#/components/schemas/DashboardColor" + shape: + type: string + enum: ['chronograf-v2'] + note: + type: string + showNoteWhenEmpty: + description: If true, will display note when empty + type: boolean + axes: + $ref: '#/components/schemas/Axes' + legend: + $ref: '#/components/schemas/Legend' + xColumn: + type: string + yColumn: + type: string + shadeBelow: + type: boolean + geom: + $ref: '#/components/schemas/XYGeom' + XYGeom: + type: string + enum: [line, step, stacked, bar, monotoneX] + LinePlusSingleStatProperties: + type: object + required: + - type + - queries + - shape + - axes + - colors + - legend + - note + - showNoteWhenEmpty + - prefix + - suffix + - decimalPlaces + properties: + type: + type: string + enum: [line-plus-single-stat] + queries: + type: array + items: + $ref: "#/components/schemas/DashboardQuery" + colors: + description: Colors define color encoding of data into a visualization + type: array + items: + $ref: "#/components/schemas/DashboardColor" + shape: + type: string + enum: ['chronograf-v2'] + note: + type: string + showNoteWhenEmpty: + description: If true, will display note when empty + type: boolean + axes: + $ref: '#/components/schemas/Axes' + legend: + $ref: '#/components/schemas/Legend' + xColumn: + type: string + yColumn: + type: string + shadeBelow: + type: boolean + prefix: + type: string + suffix: + type: string + decimalPlaces: + $ref: '#/components/schemas/DecimalPlaces' + ScatterViewProperties: + type: object + required: + - type + - queries + - colors + - shape + - note + - showNoteWhenEmpty + - xColumn + - yColumn + - fillColumns + - symbolColumns + - xDomain + - yDomain + - xAxisLabel + - yAxisLabel + - xPrefix + - yPrefix + - xSuffix + - ySuffix + properties: + type: + type: string + enum: [scatter] + queries: + type: array + items: + $ref: "#/components/schemas/DashboardQuery" + colors: + description: Colors define color encoding of data into a visualization + type: array + items: + type: string + shape: + type: string + enum: ['chronograf-v2'] + note: + type: string + showNoteWhenEmpty: + description: If true, will display note when empty + type: boolean + xColumn: + type: string + yColumn: + type: string + fillColumns: + type: array + items: + type: string + symbolColumns: + type: array + items: + type: string + xDomain: + type: array + items: + type: number + maxItems: 2 + yDomain: + type: array + items: + type: number + maxItems: 2 + xAxisLabel: + type: string + yAxisLabel: + type: string + xPrefix: + type: string + xSuffix: + type: string + yPrefix: + type: string + ySuffix: + type: string + HeatmapViewProperties: + type: object + required: + - type + - queries + - colors + - shape + - note + - showNoteWhenEmpty + - xColumn + - yColumn + - xDomain + - yDomain + - xAxisLabel + - yAxisLabel + - xPrefix + - yPrefix + - xSuffix + - ySuffix + - binSize + properties: + type: + type: string + enum: [heatmap] + queries: + type: array + items: + $ref: "#/components/schemas/DashboardQuery" + colors: + description: Colors define color encoding of data into a visualization + type: array + items: + type: string + shape: + type: string + enum: ['chronograf-v2'] + note: + type: string + showNoteWhenEmpty: + description: If true, will display note when empty + type: boolean + xColumn: + type: string + yColumn: + type: string + xDomain: + type: array + items: + type: number + maxItems: 2 + yDomain: + type: array + items: + type: number + maxItems: 2 + xAxisLabel: + type: string + yAxisLabel: + type: string + xPrefix: + type: string + xSuffix: + type: string + yPrefix: + type: string + ySuffix: + type: string + binSize: + type: number + SingleStatViewProperties: + type: object + required: + - type + - queries + - colors + - shape + - note + - showNoteWhenEmpty + - prefix + - suffix + - legend + - decimalPlaces + properties: + type: + type: string + enum: [single-stat] + queries: + type: array + items: + $ref: "#/components/schemas/DashboardQuery" + colors: + description: Colors define color encoding of data into a visualization + type: array + items: + $ref: "#/components/schemas/DashboardColor" + shape: + type: string + enum: ['chronograf-v2'] + note: + type: string + showNoteWhenEmpty: + description: If true, will display note when empty + type: boolean + prefix: + type: string + suffix: + type: string + legend: + $ref: '#/components/schemas/Legend' + decimalPlaces: + $ref: "#/components/schemas/DecimalPlaces" + HistogramViewProperties: + type: object + required: + - type + - queries + - colors + - shape + - note + - showNoteWhenEmpty + - xColumn + - fillColumns + - xDomain + - xAxisLabel + - position + - binCount + properties: + type: + type: string + enum: [histogram] + queries: + type: array + items: + $ref: "#/components/schemas/DashboardQuery" + colors: + description: Colors define color encoding of data into a visualization + type: array + items: + $ref: "#/components/schemas/DashboardColor" + shape: + type: string + enum: ['chronograf-v2'] + note: + type: string + showNoteWhenEmpty: + description: If true, will display note when empty + type: boolean + xColumn: + type: string + fillColumns: + type: array + items: + type: string + xDomain: + type: array + items: + type: number + format: float + xAxisLabel: + type: string + position: + type: string + enum: [overlaid, stacked] + binCount: + type: integer + GaugeViewProperties: + type: object + required: + - type + - queries + - colors + - shape + - note + - showNoteWhenEmpty + - prefix + - suffix + - legend + - decimalPlaces + properties: + type: + type: string + enum: [gauge] + queries: + type: array + items: + $ref: "#/components/schemas/DashboardQuery" + colors: + description: Colors define color encoding of data into a visualization + type: array + items: + $ref: "#/components/schemas/DashboardColor" + shape: + type: string + enum: ['chronograf-v2'] + note: + type: string + showNoteWhenEmpty: + description: If true, will display note when empty + type: boolean + prefix: + type: string + suffix: + type: string + legend: + $ref: '#/components/schemas/Legend' + decimalPlaces: + $ref: "#/components/schemas/DecimalPlaces" + TableViewProperties: + type: object + required: + - type + - queries + - colors + - shape + - note + - showNoteWhenEmpty + - tableOptions + - fieldOptions + - timeFormat + - decimalPlaces + properties: + type: + type: string + enum: [table] + queries: + type: array + items: + $ref: "#/components/schemas/DashboardQuery" + colors: + description: Colors define color encoding of data into a visualization + type: array + items: + $ref: "#/components/schemas/DashboardColor" + shape: + type: string + enum: ['chronograf-v2'] + note: + type: string + showNoteWhenEmpty: + description: If true, will display note when empty + type: boolean + tableOptions: + properties: + verticalTimeAxis: + description: >- + verticalTimeAxis describes the orientation of the table by + indicating whether the time axis will be displayed vertically + type: boolean + sortBy: + $ref: "#/components/schemas/RenamableField" + wrapping: + description: Wrapping describes the text wrapping style to be used in table views + type: string + enum: + - truncate + - wrap + - single-line + fixFirstColumn: + description: >- + fixFirstColumn indicates whether the first column of the table + should be locked + type: boolean + fieldOptions: + description: >- + fieldOptions represent the fields retrieved by the query with + customization options + type: array + items: + $ref: '#/components/schemas/RenamableField' + timeFormat: + description: >- + timeFormat describes the display format for time values according to + moment.js date formatting + type: string + decimalPlaces: + $ref: '#/components/schemas/DecimalPlaces' + MarkdownViewProperties: + type: object + required: + - type + - shape + - note + properties: + type: + type: string + enum: [markdown] + shape: + type: string + enum: ['chronograf-v2'] + note: + type: string + CheckViewProperties: + type: object + required: + - type + - shape + - checkID + - queries + - colors + properties: + type: + type: string + enum: [check] + shape: + type: string + enum: ['chronograf-v2'] + checkID: + type: string + check: + $ref: '#/components/schemas/Check' + queries: + type: array + items: + $ref: "#/components/schemas/DashboardQuery" + colors: + description: Colors define color encoding of data into a visualization + type: array + items: + type: string + Axes: + description: The viewport for a View's visualizations + type: object + required: ['x', 'y'] + properties: + x: + $ref: '#/components/schemas/Axis' + "y": # Quoted to prevent YAML parser from interpreting y as shorthand for true. + $ref: '#/components/schemas/Axis' + Legend: + description: Legend define encoding of data into a view's legend + type: object + properties: + type: + description: The style of the legend. + type: string + enum: + - static + orientation: + description: >- + orientation is the location of the legend with respect to the view + graph + type: string + enum: + - top + - bottom + - left + - right + DecimalPlaces: + description: Indicates whether decimal places should be enforced, and how many digits it should show. + type: object + properties: + isEnforced: + description: Indicates whether decimal point setting should be enforced + type: boolean + digits: + description: The number of digits after decimal to display + type: integer + format: int32 + ConstantVariableProperties: + properties: + type: + type: string + enum: [constant] + values: + type: array + items: + type: string + MapVariableProperties: + properties: + type: + type: string + enum: [map] + values: + type: object + additionalProperties: + type: string + QueryVariableProperties: + properties: + type: + type: string + enum: [query] + values: + type: object + properties: + query: + type: string + language: + type: string + Variable: + type: object + required: + - name + - orgID + - arguments + properties: + links: + type: object + readOnly: true + properties: + self: + type: string + format: uri + org: + type: string + format: uri + labels: + type: string + format: uri + id: + readOnly: true + type: string + orgID: + type: string + name: + type: string + description: + type: string + selected: + type: array + items: + type: string + labels: + $ref: "#/components/schemas/Labels" + arguments: + type: object + oneOf: + - $ref: "#/components/schemas/QueryVariableProperties" + - $ref: "#/components/schemas/ConstantVariableProperties" + - $ref: "#/components/schemas/MapVariableProperties" + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + Variables: + type: object + example: + variables: + - id: '1221432' + name: ":ok:" + selected: + - hello + arguments: + type: constant + values: + - howdy + - hello + - hi + - yo + - oy + - id: '1221432' + name: ":ok:" + selected: + - c + arguments: + type: map + values: + a: fdjaklfdjkldsfjlkjdsa + b: dfaksjfkljekfajekdljfas + c: fdjksajfdkfeawfeea + - id: '1221432' + name: ":ok:" + selected: + - host + arguments: + type: query + query: 'from(bucket: "foo") |> showMeasurements()' + language: flux + properties: + variables: + type: array + items: + $ref: "#/components/schemas/Variable" + ViewProperties: + oneOf: + - $ref: "#/components/schemas/LinePlusSingleStatProperties" + - $ref: "#/components/schemas/XYViewProperties" + - $ref: "#/components/schemas/SingleStatViewProperties" + - $ref: "#/components/schemas/HistogramViewProperties" + - $ref: "#/components/schemas/GaugeViewProperties" + - $ref: "#/components/schemas/TableViewProperties" + - $ref: "#/components/schemas/MarkdownViewProperties" + - $ref: "#/components/schemas/CheckViewProperties" + - $ref: "#/components/schemas/ScatterViewProperties" + - $ref: "#/components/schemas/HeatmapViewProperties" + View: + required: + - name + - properties + properties: + links: + type: object + readOnly: true + properties: + self: + type: string + id: + readOnly: true + type: string + name: + type: string + properties: + $ref: '#/components/schemas/ViewProperties' + Views: + type: object + properties: + links: + type: object + properties: + self: + type: string + views: + type: array + items: + $ref: "#/components/schemas/View" + CellUpdate: + type: object + properties: + x: + type: integer + format: int32 + "y": # Quoted to prevent YAML parser from interpreting y as shorthand for true. + type: integer + format: int32 + w: + type: integer + format: int32 + h: + type: integer + format: int32 + CreateCell: + type: object + properties: + name: + type: string + x: + type: integer + format: int32 + "y": # Quoted to prevent YAML parser from interpreting y as shorthand for true. + type: integer + format: int32 + w: + type: integer + format: int32 + h: + type: integer + format: int32 + usingView: + type: string + description: Makes a copy of the provided view. + AnalyzeQueryResponse: + type: object + properties: + errors: + type: array + items: + type: object + properties: + line: + type: integer + column: + type: integer + character: + type: integer + message: + type: string + Cell: + type: object + properties: + id: + type: string + links: + type: object + properties: + self: + type: string + view: + type: string + x: + type: integer + format: int32 + "y": # Quoted to prevent YAML parser from interpreting y as shorthand for true. + type: integer + format: int32 + w: + type: integer + format: int32 + h: + type: integer + format: int32 + viewID: + type: string + description: The reference to a view from the views API. + Cells: + type: array + items: + $ref: "#/components/schemas/Cell" + Secrets: + additionalProperties: + type: string + example: + apikey: abc123xyz + SecretKeys: + type: object + properties: + secrets: + type: array + items: + type: string + SecretKeysResponse: + allOf: + - $ref: "#/components/schemas/SecretKeys" + - type: object + properties: + links: + readOnly: true + type: object + properties: + self: + type: string + org: + type: string + CreateDashboardRequest: + properties: + orgID: + type: string + description: The ID of the organization that owns the dashboard. + name: + type: string + description: The user-facing name of the dashboard. + description: + type: string + description: The user-facing description of the dashboard. + required: + - orgID + - name + Dashboard: + type: object + allOf: + - $ref: "#/components/schemas/CreateDashboardRequest" + - type: object + properties: + links: + type: object + example: + self: "/api/v2/dashboards/1" + cells: "/api/v2/dashboards/1/cells" + owners: "/api/v2/dashboards/1/owners" + members: "/api/v2/dashboards/1/members" + logs: "/api/v2/dashboards/1/logs" + labels: "/api/v2/dashboards/1/labels" + org: "/api/v2/labels/1" + properties: + self: + $ref: "#/components/schemas/Link" + cells: + $ref: "#/components/schemas/Link" + members: + $ref: "#/components/schemas/Link" + owners: + $ref: "#/components/schemas/Link" + logs: + $ref: "#/components/schemas/Link" + labels: + $ref: "#/components/schemas/Link" + org: + $ref: "#/components/schemas/Link" + id: + readOnly: true + type: string + meta: + type: object + properties: + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time + cells: + $ref: "#/components/schemas/Cells" + labels: + $ref: "#/components/schemas/Labels" + Dashboards: + type: object + properties: + links: + $ref: "#/components/schemas/Links" + dashboards: + type: array + items: + $ref: "#/components/schemas/Dashboard" + Source: + type: object + properties: + links: + type: object + properties: + self: + type: string + query: + type: string + health: + type: string + buckets: + type: string + id: + type: string + orgID: + type: string + default: + type: boolean + name: + type: string + type: + type: string + enum: ["v1","v2","self"] + url: + type: string + format: uri + insecureSkipVerify: + type: boolean + telegraf: + type: string + token: + type: string + username: + type: string + password: + type: string + sharedSecret: + type: string + metaUrl: + type: string + format: uri + defaultRP: + type: string + languages: + type: array + readOnly: true + items: + type: string + enum: + - flux + - influxql + Sources: + type: object + properties: + links: + type: object + properties: + self: + type: string + format: uri + sources: + type: array + items: + $ref: "#/components/schemas/Source" + ScraperTargetRequest: + type: object + properties: + name: + type: string + description: The name of the scraper target. + type: + type: string + description: The type of the metrics to be parsed. + enum: [prometheus] + url: + type: string + description: The URL of the metrics endpoint. + example: http://localhost:9090/metrics + orgID: + type: string + description: The organization ID. + bucketID: + type: string + description: The ID of the bucket to write to. + ScraperTargetResponse: + type: object + allOf: + - $ref: "#/components/schemas/ScraperTargetRequest" + - type: object + properties: + id: + type: string + readOnly: true + org: + type: string + description: The organization name. + bucket: + type: string + description: The bucket name. + links: + type: object + readOnly: true + example: + self: "/api/v2/scrapers/1" + owners: "/api/v2/scrapers/1/owners" + members: "/api/v2/scrapers/1/members" + bucket: "/api/v2/buckets/1" + organization: "/api/v2/orgs/1" + properties: + self: + $ref: "#/components/schemas/Link" + members: + $ref: "#/components/schemas/Link" + owners: + $ref: "#/components/schemas/Link" + bucket: + $ref: "#/components/schemas/Link" + organization: + $ref: "#/components/schemas/Link" + ScraperTargetResponses: + type: object + properties: + configurations: + type: array + items: + $ref: "#/components/schemas/ScraperTargetResponse" + DocumentMeta: + type: object + properties: + name: + type: string + type: + type: string + templateID: + type: string + description: + type: string + version: + type: string + createdAt: + type: string + format: date-time + readOnly: true + updatedAt: + type: string + format: date-time + readOnly: true + required: + - name + - version + Document: + type: object + properties: + id: + type: string + readOnly: true + meta: + $ref: "#/components/schemas/DocumentMeta" + content: + type: object + labels: + $ref: "#/components/schemas/Labels" + links: + type: object + readOnly: true + example: + self: "/api/v2/documents/templates/1" + properties: + self: + description: The document URL. + $ref: "#/components/schemas/Link" + required: + - id + - meta + - content + DocumentCreate: + type: object + properties: + meta: + $ref: "#/components/schemas/DocumentMeta" + content: + type: object + org: + type: string + description: The organization Name. Specify either `orgID` or `org`. + orgID: + type: string + description: The organization Name. Specify either `orgID` or `org`. + labels: + type: array + description: An array of label IDs to be added as labels to the document. + items: + type: string + required: + - meta + - content + DocumentUpdate: + type: object + properties: + meta: + $ref: "#/components/schemas/DocumentMeta" + content: + type: object + DocumentListEntry: + type: object + properties: + id: + type: string + readOnly: true + meta: + $ref: "#/components/schemas/DocumentMeta" + labels: + $ref: "#/components/schemas/Labels" + links: + type: object + readOnly: true + example: + self: "/api/v2/documents/templates/1" + properties: + self: + description: The document URL. + $ref: "#/components/schemas/Link" + required: + - id + - meta + Documents: + type: object + properties: + documents: + type: array + items: + $ref: "#/components/schemas/DocumentListEntry" + TelegrafRequest: + type: object + properties: + name: + type: string + description: + type: string + agent: + type: object + properties: + collectionInterval: + type: integer + plugins: + type: array + items: + $ref: "#/components/schemas/TelegrafRequestPlugin" + orgID: + type: string + TelegrafRequestPlugin: + oneOf: + - $ref: '#/components/schemas/TelegrafPluginInputCpu' + - $ref: '#/components/schemas/TelegrafPluginInputDisk' + - $ref: '#/components/schemas/TelegrafPluginInputDiskio' + - $ref: '#/components/schemas/TelegrafPluginInputDocker' + - $ref: '#/components/schemas/TelegrafPluginInputFile' + - $ref: '#/components/schemas/TelegrafPluginInputKubernetes' + - $ref: '#/components/schemas/TelegrafPluginInputLogParser' + - $ref: '#/components/schemas/TelegrafPluginInputProcstat' + - $ref: '#/components/schemas/TelegrafPluginInputPrometheus' + - $ref: '#/components/schemas/TelegrafPluginInputRedis' + - $ref: '#/components/schemas/TelegrafPluginInputSyslog' + - $ref: '#/components/schemas/TelegrafPluginOutputFile' + - $ref: '#/components/schemas/TelegrafPluginOutputInfluxDBV2' + TelegrafPluginInputCpu: + type: object + required: + - name + - type + properties: + name: + type: string + enum: ["cpu"] + type: + type: string + enum: ["input"] + comment: + type: string + TelegrafPluginInputDisk: + type: object + required: + - name + - type + properties: + name: + type: string + enum: ["disk"] + type: + type: string + enum: ["input"] + comment: + type: string + TelegrafPluginInputDiskio: + type: + object + required: + - name + - type + properties: + name: + type: string + enum: ["diskio"] + type: + type: string + enum: ["input"] + comment: + type: string + TelegrafPluginInputDocker: + type: + object + required: + - name + - type + - config + properties: + name: + type: string + enum: ["docker"] + type: + type: string + enum: ["input"] + comment: + type: string + config: + $ref: '#/components/schemas/TelegrafPluginInputDockerConfig' + TelegrafPluginInputFile: + type: + object + required: + - name + - type + - config + properties: + name: + type: string + enum: ["file"] + type: + type: string + enum: [input] + comment: + type: string + config: + $ref: '#/components/schemas/TelegrafPluginInputFileConfig' + TelegrafPluginInputKernel: + type: + object + required: + - name + - type + properties: + name: + type: string + enum: ["kernel"] + type: + type: string + enum: ["input"] + comment: + type: string + TelegrafPluginInputKubernetes: + type: + object + required: + - name + - type + - config + properties: + name: + type: string + enum: ["kubernetes"] + type: + type: string + enum: ["input"] + comment: + type: string + config: + $ref: '#/components/schemas/TelegrafPluginInputKubernetesConfig' + TelegrafPluginInputLogParser: + type: + object + required: + - name + - type + - config + properties: + name: + type: string + enum: ["logparser"] + type: + type: string + enum: ["input"] + comment: + type: string + config: + $ref: '#/components/schemas/TelegrafPluginInputLogParserConfig' + TelegrafPluginInputMem: + type: + object + required: + - name + - type + properties: + name: + type: string + enum: ["mem"] + type: + type: string + enum: ["input"] + comment: + type: string + TelegrafPluginInputNetResponse: + type: + object + required: + - name + - type + properties: + name: + type: string + enum: ["net_response"] + type: + type: string + enum: ["input"] + comment: + type: string + TelegrafPluginInputNet: + type: + object + required: + - name + - type + properties: + name: + type: string + enum: ["net"] + type: + type: string + enum: ["input"] + comment: + type: string + TelegrafPluginInputNginx: + type: + object + required: + - name + - type + properties: + name: + type: string + enum: ["nginx"] + type: + type: string + enum: ["input"] + comment: + type: string + TelegrafPluginInputProcesses: + type: + object + required: + - name + - type + properties: + name: + type: string + enum: ["processes"] + type: + type: string + enum: ["input"] + comment: + type: string + TelegrafPluginInputProcstat: + type: + object + required: + - name + - type + - config + properties: + name: + type: string + enum: ["procstat"] + type: + type: string + enum: ["input"] + comment: + type: string + config: + $ref: '#/components/schemas/TelegrafPluginInputProcstatConfig' + TelegrafPluginInputPrometheus: + type: + object + required: + - name + - type + - config + properties: + name: + type: string + enum: ["prometheus"] + type: + type: string + enum: ["input"] + comment: + type: string + config: + $ref: '#/components/schemas/TelegrafPluginInputPrometheusConfig' + TelegrafPluginInputRedis: + type: + object + required: + - name + - type + - config + properties: + name: + type: string + enum: ["redis"] + type: + type: string + enum: ["input"] + comment: + type: string + config: + $ref: '#/components/schemas/TelegrafPluginInputRedisConfig' + TelegrafPluginInputSyslog: + type: + object + required: + - name + - type + - config + properties: + name: + type: string + enum: ["syslog"] + type: + type: string + enum: ["input"] + comment: + type: string + config: + $ref: '#/components/schemas/TelegrafPluginInputSyslogConfig' + TelegrafPluginInputSwap: + type: + object + required: + - name + - type + properties: + name: + type: string + enum: ["swap"] + type: + type: string + enum: ["input"] + comment: + type: string + TelegrafPluginInputSystem: + type: + object + required: + - name + - type + properties: + name: + type: string + enum: ["system"] + type: + type: string + enum: ["input"] + comment: + type: string + TelegrafPluginInputTail: + type: + object + required: + - name + - type + properties: + name: + type: string + enum: ["tail"] + type: + type: string + enum: ["input"] + comment: + type: string + TelegrafPluginOutputFile: + type: + object + required: + - name + - type + - config + properties: + name: + type: string + enum: ["file"] + type: + type: string + enum: ["output"] + comment: + type: string + config: + $ref: '#/components/schemas/TelegrafPluginOutputFileConfig' + TelegrafPluginOutputInfluxDBV2: + type: + object + required: + - name + - type + - config + properties: + name: + type: string + enum: ["influxdb_v2"] + type: + type: string + enum: ["output"] + comment: + type: string + config: + $ref: '#/components/schemas/TelegrafPluginOutputInfluxDBV2Config' + Telegraf: + type: object + allOf: + - $ref: "#/components/schemas/TelegrafRequest" + - type: object + properties: + id: + type: string + readOnly: true + links: + type: object + readOnly: true + example: + self: "/api/v2/telegrafs/1" + lables: "/api/v2/telegrafs/1/labels" + owners: "/api/v2/telegrafs/1/owners" + members: "/api/v2/telegrafs/1/members" + properties: + self: + $ref: "#/components/schemas/Link" + labels: + $ref: "#/components/schemas/Link" + members: + $ref: "#/components/schemas/Link" + owners: + $ref: "#/components/schemas/Link" + labels: + readOnly: true + $ref: "#/components/schemas/Labels" + Telegrafs: + type: object + properties: + configurations: + type: array + items: + $ref: "#/components/schemas/Telegraf" + TelegrafPluginInputDockerConfig: + type: object + required: + - endpoint + properties: + endpoint: + type: string + TelegrafPluginInputFileConfig: + type: object + properties: + files: + type: array + items: + type: string + TelegrafPluginInputKubernetesConfig: + type: object + properties: + url: + type: string + format: uri + TelegrafPluginInputLogParserConfig: + type: object + properties: + files: + type: array + items: + type: string + TelegrafPluginInputProcstatConfig: + type: object + properties: + exe: + type: string + TelegrafPluginInputPrometheusConfig: + type: object + properties: + urls: + type: array + items: + type: string + format: uri + TelegrafPluginInputRedisConfig: + type: object + properties: + servers: + type: array + items: + type: string + password: + type: string + TelegrafPluginInputSyslogConfig: + type: object + properties: + server: + type: string + TelegrafPluginOutputFileConfig: + type: object + required: + - files + properties: + files: + type: array + items: + type: object + properties: + type: + type: string + enum: [stdout, path] + path: + type: string + TelegrafPluginOutputInfluxDBV2Config: + type: object + required: + - urls + - token + - organization + - bucket + properties: + urls: + type: array + items: + type: string + format: uri + token: + type: string + organization: + type: string + bucket: + type: string + IsOnboarding: + type: object + properties: + allowed: + description: True means that the influxdb instance has NOT had initial setup; false means that the database has been setup. + type: boolean + OnboardingRequest: + type: object + properties: + username: + type: string + password: + type: string + org: + type: string + bucket: + type: string + retentionPeriodHrs: + type: integer + required: + - username + - password + - org + - bucket + OnboardingResponse: + type: object + properties: + user: + $ref: "#/components/schemas/User" + org: + $ref: "#/components/schemas/Organization" + bucket: + $ref: "#/components/schemas/Bucket" + auth: + $ref: "#/components/schemas/Authorization" + PasswordResetBody: + properties: + password: + type: string + required: + - password + AddResourceMemberRequestBody: + type: object + properties: + id: + type: string + name: + type: string + required: + - id + Ready: + type: object + properties: + status: + type: string + enum: + - ready + started: + type: string + format: date-time + example: "2019-03-13T10:09:33.891196-04:00" + up: + type: string + example: "14m45.911966424s" + HealthCheck: + type: object + required: + - name + - status + properties: + name: + type: string + message: + type: string + checks: + type: array + items: + $ref: "#/components/schemas/HealthCheck" + status: + type: string + enum: + - pass + - fail + Labels: + type: array + items: + $ref: "#/components/schemas/Label" + Label: + type: object + properties: + id: + readOnly: true + type: string + orgID: + readOnly: true + type: string + name: + type: string + properties: + type: object + additionalProperties: + type: string + description: Key/Value pairs associated with this label. Keys can be removed by sending an update with an empty value. + example: {"color": "ffb3b3", "description": "this is a description"} + LabelCreateRequest: + type: object + required: [orgID] + properties: + orgID: + type: string + name: + type: string + properties: + type: object + additionalProperties: + type: string + description: Key/Value pairs associated with this label. Keys can be removed by sending an update with an empty value. + example: {"color": "ffb3b3", "description": "this is a description"} + LabelUpdate: + type: object + properties: + name: + type: string + properties: + type: object + description: Key/Value pairs associated with this label. Keys can be removed by sending an update with an empty value. + example: {"color": "ffb3b3", "description": "this is a description"} + LabelMapping: + type: object + properties: + labelID: + type: string + LabelsResponse: + type: object + properties: + labels: + $ref: "#/components/schemas/Labels" + links: + $ref: "#/components/schemas/Links" + LabelResponse: + type: object + properties: + label: + $ref: "#/components/schemas/Label" + links: + $ref: "#/components/schemas/Links" + ASTResponse: + description: Contains the AST for the supplied Flux query + type: object + properties: + ast: + $ref: "#/components/schemas/Package" + WritePrecision: + type: string + enum: + - ms + - s + - us + - ns + TaskCreateRequest: + type: object + properties: + type: + description: The type of task, this can be used for filtering tasks on list actions. + type: string + orgID: + description: The ID of the organization that owns this Task. + type: string + org: + description: The name of the organization that owns this Task. + type: string + status: + $ref: "#/components/schemas/TaskStatusType" + flux: + description: The Flux script to run for this task. + type: string + description: + description: An optional description of the task. + type: string + required: [flux] + TaskUpdateRequest: + type: object + properties: + status: + $ref: "#/components/schemas/TaskStatusType" + flux: + description: The Flux script to run for this task. + type: string + name: + description: Override the 'name' option in the flux script. + type: string + every: + description: Override the 'every' option in the flux script. + type: string + cron: + description: Override the 'cron' option in the flux script. + type: string + offset: + description: Override the 'offset' option in the flux script. + type: string + description: + description: An optional description of the task. + type: string + FluxResponse: + description: Rendered flux that backs the check or notification. + properties: + flux: + type: string + CheckPatch: + type: object + properties: + name: + type: string + description: + type: string + status: + type: string + enum: + - active + - inactive + Check: + oneOf: + - $ref: "#/components/schemas/DeadmanCheck" + - $ref: "#/components/schemas/ThresholdCheck" + discriminator: + propertyName: type + mapping: + deadman: "#/components/schemas/DeadmanCheck" + threshold: "#/components/schemas/ThresholdCheck" + Checks: + properties: + checks: + type: array + items: + $ref: "#/components/schemas/Check" + links: + $ref: "#/components/schemas/Links" + CheckBase: + properties: + id: + readOnly: true + type: string + name: + type: string + orgID: + description: The ID of the organization that owns this check. + type: string + ownerID: + description: The ID of creator used to create this check. + type: string + readOnly: true + createdAt: + type: string + format: date-time + readOnly: true + updatedAt: + type: string + format: date-time + readOnly: true + query: + $ref: "#/components/schemas/DashboardQuery" + status: + $ref: "#/components/schemas/TaskStatusType" + every: + description: Check repetition interval. + type: string + offset: + description: Duration to delay after the schedule, before executing check. + type: string + tags: + description: List of tags to write to each status. + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + description: + description: An optional description of the check. + type: string + statusMessageTemplate: + description: The template used to generate and write a status message. + type: string + labels: + $ref: "#/components/schemas/Labels" + links: + type: object + readOnly: true + example: + self: "/api/v2/checks/1" + labels: "/api/v2/checks/1/labels" + members: "/api/v2/checks/1/members" + owners: "/api/v2/checks/1/owners" + properties: + self: + description: URL for this check + $ref: "#/components/schemas/Link" + labels: + description: URL to retrieve labels for this check + $ref: "#/components/schemas/Link" + members: + description: URL to retrieve members for this check + $ref: "#/components/schemas/Link" + owners: + description: URL to retrieve owners for this check + $ref: "#/components/schemas/Link" + required: [name, type, orgID, query] + ThresholdCheck: + allOf: + - $ref: "#/components/schemas/CheckBase" + - type: object + properties: + type: + type: string + enum: [threshold] + thresholds: + type: array + items: + $ref: "#/components/schemas/Threshold" + Threshold: + oneOf: + - $ref: "#/components/schemas/GreaterThreshold" + - $ref: "#/components/schemas/LesserThreshold" + - $ref: "#/components/schemas/RangeThreshold" + discriminator: + propertyName: type + mapping: + greater: "#/components/schemas/GreaterThreshold" + lesser: "#/components/schemas/LesserThreshold" + range: "#/components/schemas/RangeThreshold" + DeadmanCheck: + allOf: + - $ref: "#/components/schemas/CheckBase" + - type: object + properties: + type: + type: string + enum: [deadman] + timeSince: + description: String duration before deadman triggers. + type: string + staleTime: + description: String duration for time that a series is considered stale and should not trigger deadman. + type: string + reportZero: + description: If only zero values reported since time, trigger an alert + type: boolean + level: + $ref: "#/components/schemas/CheckStatusLevel" + ThresholdBase: + properties: + level: + $ref: "#/components/schemas/CheckStatusLevel" + allValues: + description: If true, only alert if all values meet threshold. + type: boolean + GreaterThreshold: + allOf: + - $ref: "#/components/schemas/ThresholdBase" + - type: object + required: [type, value] + properties: + type: + type: string + enum: [greater] + value: + type: number + format: float + LesserThreshold: + allOf: + - $ref: "#/components/schemas/ThresholdBase" + - type: object + required: [type, value] + properties: + type: + type: string + enum: [lesser] + value: + type: number + format: float + RangeThreshold: + allOf: + - $ref: "#/components/schemas/ThresholdBase" + - type: object + required: [type, min, max, within] + properties: + type: + type: string + enum: [range] + min: + type: number + format: float + max: + type: number + format: float + within: + type: boolean + CheckStatusLevel: + description: The state to record if check matches a criteria. + type: string + enum: ["UNKNOWN", "OK", "INFO", "CRIT", "WARN"] + RuleStatusLevel: + description: The state to record if check matches a criteria. + type: string + enum: ["UNKNOWN", "OK", "INFO", "CRIT", "WARN", "ANY"] + NotificationRuleUpdate: + type: object + properties: + name: + type: string + description: + type: string + status: + type: string + enum: + - active + - inactive + NotificationRule: + oneOf: + - $ref: "#/components/schemas/SlackNotificationRule" + - $ref: "#/components/schemas/SMTPNotificationRule" + - $ref: "#/components/schemas/PagerDutyNotificationRule" + - $ref: "#/components/schemas/HTTPNotificationRule" + discriminator: + propertyName: type + mapping: + slack: "#/components/schemas/SlackNotificationRule" + smtp: "#/components/schemas/SMTPNotificationRule" + pagerduty: "#/components/schemas/PagerDutyNotificationRule" + http: "#/components/schemas/HTTPNotificationRule" + NotificationRules: + properties: + notificationRules: + type: array + items: + $ref: "#/components/schemas/NotificationRule" + links: + $ref: "#/components/schemas/Links" + NotificationRuleBase: + type: object + required: + - id + - orgID + - status + - name + - tagRules + - statusRules + - endpointID + properties: + id: + readOnly: true + type: string + endpointID: + type: string + orgID: + description: The ID of the organization that owns this notification rule. + type: string + ownerID: + description: The ID of creator used to create this notification rule. + type: string + readOnly: true + createdAt: + type: string + format: date-time + readOnly: true + updatedAt: + type: string + format: date-time + readOnly: true + status: + $ref: "#/components/schemas/TaskStatusType" + name: + description: Human-readable name describing the notification rule. + type: string + sleepUntil: + type: string + every: + description: The notification repetition interval. + type: string + offset: + description: Duration to delay after the schedule, before executing check. + type: string + runbookLink: + type: string + limitEvery: + description: Don't notify me more than times every seconds. If set, limit cannot be empty. + type: integer + limit: + description: Don't notify me more than times every seconds. If set, limitEvery cannot be empty. + type: integer + tagRules: + description: List of tag rules the notification rule attempts to match. + type: array + items: + $ref: "#/components/schemas/TagRule" + description: + description: An optional description of the notification rule. + type: string + statusRules: + description: List of status rules the notification rule attempts to match. + type: array + minItems: 1 + items: + $ref: "#/components/schemas/StatusRule" + labels: + $ref: "#/components/schemas/Labels" + links: + type: object + readOnly: true + example: + self: "/api/v2/notificationRules/1" + labels: "/api/v2/notificationRules/1/labels" + members: "/api/v2/notificationRules/1/members" + owners: "/api/v2/notificationRules/1/owners" + properties: + self: + description: URL for this endpoint. + $ref: "#/components/schemas/Link" + labels: + description: URL to retrieve labels for this notification rule. + $ref: "#/components/schemas/Link" + members: + description: URL to retrieve members for this notification rule. + $ref: "#/components/schemas/Link" + owners: + description: URL to retrieve owners for this notification rule. + $ref: "#/components/schemas/Link" + TagRule: + type: object + properties: + key: + type: string + value: + type: string + operator: + type: string + enum: ["equal", "notequal", "equalregex","notequalregex"] + StatusRule: + type: object + properties: + currentLevel: + $ref: "#/components/schemas/RuleStatusLevel" + previousLevel: + $ref: "#/components/schemas/RuleStatusLevel" + count: + type: integer + period: + type: string + HTTPNotificationRuleBase: + type: object + required: [type, url] + properties: + type: + type: string + enum: [http] + url: + type: string + HTTPNotificationRule: + allOf: + - $ref: "#/components/schemas/NotificationRuleBase" + - $ref: "#/components/schemas/HTTPNotificationRuleBase" + SlackNotificationRuleBase: + type: object + required: [type, messageTemplate] + properties: + type: + type: string + enum: [slack] + channel: + type: string + messageTemplate: + type: string + SlackNotificationRule: + allOf: + - $ref: "#/components/schemas/NotificationRuleBase" + - $ref: "#/components/schemas/SlackNotificationRuleBase" + SMTPNotificationRule: + allOf: + - $ref: "#/components/schemas/NotificationRuleBase" + - $ref: "#/components/schemas/SMTPNotificationRuleBase" + SMTPNotificationRuleBase: + type: object + required: [type, subjectTemplate, to] + properties: + type: + type: string + enum: [smtp] + subjectTemplate: + type: string + bodyTemplate: + type: string + to: + type: string + PagerDutyNotificationRule: + allOf: + - $ref: "#/components/schemas/NotificationRuleBase" + - $ref: "#/components/schemas/PagerDutyNotificationRuleBase" + PagerDutyNotificationRuleBase: + type: object + required: [type, messageTemplate] + properties: + type: + type: string + enum: [pagerduty] + messageTemplate: + type: string + NotificationEndpointUpdate: + type: object + properties: + name: + type: string + description: + type: string + status: + type: string + enum: + - active + - inactive + NotificationEndpoint: + oneOf: + - $ref: "#/components/schemas/SlackNotificationEndpoint" + - $ref: "#/components/schemas/PagerDutyNotificationEndpoint" + - $ref: "#/components/schemas/HTTPNotificationEndpoint" + discriminator: + propertyName: type + mapping: + slack: "#/components/schemas/SlackNotificationEndpoint" + pagerduty: "#/components/schemas/PagerDutyNotificationEndpoint" + http: "#/components/schemas/HTTPNotificationEndpoint" + NotificationEndpoints: + properties: + notificationEndpoints: + type: array + items: + $ref: "#/components/schemas/NotificationEndpoint" + links: + $ref: "#/components/schemas/Links" + NotificationEndpointBase: + type: object + required: [type, name] + properties: + id: + type: string + orgID: + type: string + userID: + type: string + createdAt: + type: string + format: date-time + readOnly: true + updatedAt: + type: string + format: date-time + readOnly: true + description: + description: An optional description of the notification endpoint. + type: string + name: + type: string + status: + description: The status of the endpoint. + default: active + type: string + enum: ["active", "inactive"] + labels: + $ref: "#/components/schemas/Labels" + links: + type: object + readOnly: true + example: + self: "/api/v2/notificationEndpoints/1" + labels: "/api/v2/notificationEndpoints/1/labels" + members: "/api/v2/notificationEndpoints/1/members" + owners: "/api/v2/notificationEndpoints/1/owners" + properties: + self: + description: URL for this endpoint. + $ref: "#/components/schemas/Link" + labels: + description: URL to retrieve labels for this endpoint. + $ref: "#/components/schemas/Link" + members: + description: URL to retrieve members for this endpoint. + $ref: "#/components/schemas/Link" + owners: + description: URL to retrieve owners for this endpoint. + $ref: "#/components/schemas/Link" + type: + $ref: "#/components/schemas/NotificationEndpointType" + SlackNotificationEndpoint: + type: object + allOf: + - $ref: "#/components/schemas/NotificationEndpointBase" + - type: object + properties: + url: + description: Specifies the URL of the Slack endpoint. Specify either `URL` or `Token`. + type: string + token: + description: Specifies the API token string. Specify either `URL` or `Token`. + type: string + PagerDutyNotificationEndpoint: + type: object + allOf: + - $ref: "#/components/schemas/NotificationEndpointBase" + - type: object + required: [clientURL, routingKey] + properties: + clientURL: + type: string + routingKey: + type: string + HTTPNotificationEndpoint: + type: object + allOf: + - $ref: "#/components/schemas/NotificationEndpointBase" + - type: object + required: [url, authMethod, method] + properties: + url: + type: string + username: + type: string + password: + type: string + token: + type: string + method: + type: string + enum: ['POST', 'GET', 'PUT'] + authMethod: + type: string + enum: ['none', 'basic', 'bearer'] + contentTemplate: + type: string + headers: + type: object + description: Customized headers. + additionalProperties: + type: string + NotificationEndpointType: + type: string + enum: ['slack', 'pagerduty', 'http'] + securitySchemes: + BasicAuth: + type: http + scheme: basic diff --git a/assets/js/content-interactions.js b/assets/js/content-interactions.js index ac2e10425..b2a5d4262 100644 --- a/assets/js/content-interactions.js +++ b/assets/js/content-interactions.js @@ -35,9 +35,9 @@ $('.article a[href^="#"]:not(' + elementWhiteList + ')').click(function (e) { ///////////////////////////// Left Nav Interactions ///////////////////////////// $(".children-toggle").click(function(e) { - e.preventDefault() - $(this).toggleClass('open'); - $(this).siblings('.children').toggleClass('open'); + e.preventDefault() + $(this).toggleClass('open'); + $(this).siblings('.children').toggleClass('open'); }) //////////////////////////// Mobile Contents Toggle //////////////////////////// @@ -52,28 +52,28 @@ $('#contents-toggle-btn').click(function(e) { function tabbedContent(container, tab, content) { - // Add the active class to the first tab in each tab group, - // in case it wasn't already set in the markup. - $(container).each(function () { - $(tab, this).removeClass('is-active'); - $(tab + ':first', this).addClass('is-active'); - }); + // Add the active class to the first tab in each tab group, + // in case it wasn't already set in the markup. + $(container).each(function () { + $(tab, this).removeClass('is-active'); + $(tab + ':first', this).addClass('is-active'); + }); - $(tab).on('click', function(e) { - e.preventDefault(); + $(tab).on('click', function(e) { + e.preventDefault(); - // Make sure the tab being clicked is marked as active, and make the rest inactive. - $(this).addClass('is-active').siblings().removeClass('is-active'); + // Make sure the tab being clicked is marked as active, and make the rest inactive. + $(this).addClass('is-active').siblings().removeClass('is-active'); - // Render the correct tab content based on the position of the tab being clicked. - const activeIndex = $(tab).index(this); - $(content).each(function(i) { - if (i === activeIndex) { - $(this).show(); - $(this).siblings(content).hide(); - } - }); - }); + // Render the correct tab content based on the position of the tab being clicked. + const activeIndex = $(tab).index(this); + $(content).each(function(i) { + if (i === activeIndex) { + $(this).show(); + $(this).siblings(content).hide(); + } + }); + }); } tabbedContent('.code-tabs-wrapper', '.code-tabs p a', '.code-tab-content'); @@ -82,8 +82,8 @@ tabbedContent('.tabs-wrapper', '.tabs p a', '.tab-content'); /////////////////////////////// Truncate Content /////////////////////////////// $(".truncate-toggle").click(function(e) { - e.preventDefault() - $(this).closest('.truncate').toggleClass('closed'); + e.preventDefault() + $(this).closest('.truncate').toggleClass('closed'); }) //////////////////// Replace Missing Images with Placeholder /////////////////// @@ -92,3 +92,11 @@ $(".article--content img").on("error", function() { $(this).attr("src", "/img/coming-soon.svg"); $(this).attr("style", "max-width:500px;"); }); + +////////////////////////// Inject tooltips on load ////////////////////////////// + +$('.tooltip').each( function(){ + $toolTipText = $('
').addClass('tooltip-text').text($(this).attr('data-tooltip-text')); + $toolTipElement = $('
').addClass('tooltip-container').append($toolTipText); + $(this).prepend($toolTipElement); +}); diff --git a/assets/js/telegraf-filters.js b/assets/js/telegraf-filters.js new file mode 100644 index 000000000..1c17a2702 --- /dev/null +++ b/assets/js/telegraf-filters.js @@ -0,0 +1,50 @@ +// Count tag elements +function countTag(tag) { + return $(".visible[data-tags*='" + tag + "']").length +} + +function getFilterCounts() { + $('#plugin-filters label').each(function() { + var tagName = $('input', this).attr('name').replace(/[\W]+/, "-"); + var tagCount = countTag(tagName); + $(this).attr('data-count', '(' + tagCount + ')'); + if (tagCount <= 0) { + $(this).fadeTo(200, 0.25); + } else { + $(this).fadeTo(400, 1.0); + } + }) +} + +// Get initial filter count on page load +getFilterCounts() + +$("#plugin-filters input").click(function() { + + // List of tags to hide + var tagArray = $("#plugin-filters input:checkbox:checked").map(function(){ + return $(this).attr('name').replace(/[\W]+/, "-"); + }).get(); + + // List of tags to restore + var restoreArray = $("#plugin-filters input:checkbox:not(:checked)").map(function(){ + return $(this).attr('name').replace(/[\W]+/, "-"); + }).get(); + + // Actions for filter select + if ( $(this).is(':checked') ) { + $.each( tagArray, function( index, value ) { + $(".plugin-card.visible:not([data-tags~='" + value + "'])").removeClass('visible').fadeOut() + }) + } else { + $.each( restoreArray, function( index, value ) { + $(".plugin-card:not(.visible)[data-tags~='" + value + "']").addClass('visible').fadeIn() + }) + $.each( tagArray, function( index, value ) { + $(".plugin-card.visible:not([data-tags~='" + value + "'])").removeClass('visible').hide() + }) + } + + // Refresh filter count + getFilterCounts() +}); diff --git a/assets/styles/layouts/_api-overrides.scss b/assets/styles/layouts/_api-overrides.scss new file mode 100644 index 000000000..080b3d918 --- /dev/null +++ b/assets/styles/layouts/_api-overrides.scss @@ -0,0 +1,266 @@ +@import "tools/color-palette"; +@import "tools/icomoon"; + +// Fonts +$rubik: 'Rubik', sans-serif; +$roboto: 'Roboto', sans-serif; +$roboto-mono: 'Roboto Mono', monospace; + +// Font weights +$medium: 500; +$bold: 700; + +//////////////////////////////////// LOADER //////////////////////////////////// + +#loading { + position: fixed; + width: 100vw; + height: 100vh; + z-index: 1000; + background-color: $g20-white; + opacity: 1; + transition: opacity .5s; +} + +@keyframes spinner { + to {transform: rotate(360deg);} +} + +.spinner:before { + content: ''; + box-sizing: border-box; + position: absolute; + top: 50%; + left: 50%; + width: 50px; + height: 50px; + margin-top: -25px; + margin-left: -25px; + border-radius: 50%; + border: 3px solid $g16-pearl; + border-top-color: $cp-comet; + animation: spinner .6s linear infinite; +} + +//////////////////////////////// InfluxDB Header /////////////////////////////// + +#influx-header { + font-family: $rubik; + padding: 15px 20px ; + display: block; + background-color: $wp-violentdark; + a { + color: $g20-white; + text-decoration: none; + transition: color .2s; + &:hover { + color: $b-pool; + } + &:before { + content: '\e918'; + font-family: 'icomoon'; + margin-right: .65rem; + } + } +} + +//////////////////////////////////////////////////////////////////////////////// + +.cjtbAK { + h1,h2,h3,h4,h5,h6, + p,li,th,td { + font-family: $rubik !important; + } +} + +#redoc { + h1,h2,h3,h4,h5,h6 { + font-weight: $medium !important; + } +} + +// Section title padding +.dluJDj { + padding: 20px 0; +} + +// Page h1 +.dTJWQH { + color: $g7-graphite; + font-size: 2rem; +} + +// Download button +.jIdpVJ { + background: $b-dodger; + color: $g20-white; + border: none; + border-radius: 3px; + font-family: $rubik; + font-size: .85rem; + font-weight: $medium; + transition: background-color .2s; + &:hover { + background-color: $b-pool; + } +} + +// Tag h1s +.WxWXp { + color: $g7-graphite; + font-size: 1.75rem; +} + +// Summaru h2s and table headers +.ioYTqA, .bxcHYI, .hoUoen { + color: $g7-graphite; +} + +// h3s +.espozG { + color: $g8-storm; +} + +// Links +.bnFPhO a { color: $b-dodger; + &:visited {color: $b-dodger;} +} + +.redoc-json { + font-family: $roboto-mono !important; +} + +// Inline Code +.flfxUM code, +.gDsWLk code, +.kTVySD { + font-family: $roboto-mono !important; + color: $cp-marguerite; + background: $cp-titan; + border-color: $cp-titan; +} + +// Required tags +.jsTAxL { + color: $o-curacao; +} + +///////////////////////////// RESPONSE COLOR BLOCKS //////////////////////////// + +// Green +.hLVzSF { + background-color: rgba($gr-wasabi, .5); + color: $gr-emerald; +} + +// Red +.byLrBg { + background-color: rgba($o-marmelade, .35); + color: $o-curacao; +} + + + +/////////////////////////////////// LEFT NAV /////////////////////////////////// + +// Left nav background +.gZdDsM { + background-color: $g19-ghost; +} + +.gpbcFk:hover, .sc-eTuwsz.active { + background-color: rgb(237, 237, 237); +} + +// List item text +.SmuWE, .gcUzvG, .bbViyS, .sc-hrWEMg label { + font-family: $rubik !important; +} + +.fyUykq { + font-weight: $medium; +} + +// Request method tags +.cFwMcp { + &.post { background-color: $b-curious; } + &.get { background-color: $gr-canopy; } + &.put { background-color: $cp-comet; } + &.patch { background-color: $ch-keylime; } + &.delete { background-color: $o-curacao; } +} + +// Active nav section +.gcUzvG, .iNzLCk:hover { + color: $m-magenta; +} + +/////////////////////////////// RIGHT CODE COLUMN ////////////////////////////// + +// Right column backgrounds +.dtUibw, .fLUKgj { + background-color: $wp-jagger; + h3,h4,h5,h6 { + font-family: $rubik !important; + font-weight: $medium !important; + } +} + +// Code backgrounds +.irpqyy > .react-tabs__tab-panel { + background-color: $wp-telopea; +} +.dHLKeu, .fVaxnA { + padding-left: 10px; + background-color: $wp-telopea; +} + +// Response code tabs +.irpqyy > ul > li { + background-color: $wp-telopea; + border-radius: 3px; + &.react-tabs__tab--selected{ color: $cp-blueviolet; } + &.tab-error { color: $o-fire; } + &.tab-success { color: $gr-viridian; } +} + +// Request methods +.bNYCAJ, +.jBjYbV, +.hOczRB, +.fRsrDc, +.hPskZd { + font-family: $rubik; + font-weight: $medium; + letter-spacing: .04em; + border-radius: 3px; +} +.bNYCAJ { background-color: $b-curious; } /* Post */ +.jBjYbV { background-color: $gr-canopy; } /* Get */ +.hOczRB { background-color: $cp-comet; } /* Put */ +.fRsrDc { background-color: $ch-chartreuse; color: $ch-olive; } /* Patch */ +.hPskZd { background-color: $o-curacao; } /* Delete */ + +// Content type block +.gzAoUb { + background-color: rgba($wp-jagger, .4); + font-family: $rubik; +} +.iENVAs { font-family: $roboto-mono; } +.dpMbau { font-family: $rubik; } + +// Code controls +.fCJmC { + font-family: $rubik; + span { border-radius: 3px; } +} + +// Code blocks +.kZHJcC { font-family: $roboto-mono; } +.jCgylq { + .token.string { + color: $gr-honeydew; + & + a { color: $b-malibu; } + } + .token.boolean { color: #f955b0; } +} diff --git a/assets/styles/layouts/_article.scss b/assets/styles/layouts/_article.scss index 7d36aad37..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 { @@ -61,7 +62,7 @@ p,li { color: $article-text; - line-height: 1.6rem; + line-height: 1.7rem; } p { @@ -106,10 +107,12 @@ "article/lists", "article/note", "article/pagination-btns", + "article/related", "article/scrollbars", "article/tabbed-content", "article/tables", "article/tags", + "article/telegraf-plugins", "article/truncate", "article/warn"; 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/layouts/_landing.scss b/assets/styles/layouts/_landing.scss index 88df3f075..9c5409264 100644 --- a/assets/styles/layouts/_landing.scss +++ b/assets/styles/layouts/_landing.scss @@ -1,9 +1,10 @@ .cards { display: flex; - justify-content: space-between; - flex-direction: column; + flex-direction: row; position: relative; overflow: hidden; + border-radius: $radius 0 0 $radius; + min-height: 700px; background: linear-gradient(55deg, $landing-lg-gradient-left, $landing-lg-gradient-right ); a { @@ -21,62 +22,110 @@ } } + .main { + width: 66%; + padding: 5rem 2vw 5rem 4.5vw; + display: flex; + justify-content: center; + flex-direction: column; + + text-align: center; + z-index: 1; + } + .group { display: flex; - flex-wrap: wrap; + width: 34%; + justify-content: flex-end; } .card { - text-align: center; - z-index: 1; - &.full { - width: 100%; - padding: 5rem 2rem; - } + &.sm { + display: flex; + flex-direction: column; + justify-content: center; + text-align: left; + width: 90%; + position: relative; + margin-bottom: 1px; + padding: 2rem 3.5vw 2rem 3vw; + min-height: 140px; + background: $landing-sm-bg; + transition: background-color .4s, width .2s; + + &:last-child{ margin-bottom: 0; } - &.quarter { - flex-grow: 2; - margin: 1px; - padding: 1.5rem; - background: rgba($landing-sm-gradient-overlay, .65); - transition: background-color .4s; &:hover { - background: rgba($landing-sm-gradient-overlay, .9); + background: $landing-sm-bg-hover; + width: 100%; + h3 { + transform: translateY(-1.2rem); + font-weight: $medium; + font-size: 1.2rem; + } + p { + opacity: 1; + transition-delay: 100ms; + } + } + + h3 { + font-size: 1.1rem; + transition: all .2s; + } + p { + position: absolute; + width: 80%; + color: $g20-white; + font-size: .95rem; + line-height: 1.25rem; + opacity: 0; + transition: opacity .2s; } } h1,h2,h3,h4 { font-weight: 300; - text-align: center; color: $g20-white; } h1 { margin: 0 0 1.25rem; - font-size: 2.25rem; + font-size: 2.5rem; z-index: 1; } - h3 { font-size: 1.25rem;} - &#get-started { - text-align: center; - .btn { display: inline-block; - padding: .85rem 1.5rem; - color: $g20-white; - font-weight: bold; - background: rgba($g20-white, .25); - border: 2px solid rgba($g20-white, .5); - border-radius: $radius; + padding: 1.25rem; + margin: 0 20% .35rem; + color: $landing-btn-text; + font-size: 1.1rem; + font-weight: $medium; + background: $landing-btn-bg; transition: background-color .2s, color .2s; + border-radius: $radius; + + &.oss:after { + content: 'alpha'; + display: inline-block; + vertical-align: top; + font-style: italic; + font-size: .75em; + margin-left: .45rem; + padding: .1rem .3rem .12rem; + border-radius: $radius; + border: 1px solid rgba($landing-btn-text, .5); + transition: border-color .2s; + } &:hover { - background: $g20-white; - color: $b-pool; + background: $landing-btn-bg-hover; + color: $landing-btn-text-hover; + &:after { border-color: rgba($landing-btn-text-hover, .5) } } } } @@ -97,17 +146,59 @@ } } +@media (max-width: 1150px) { + .cards { + flex-direction: column; + .main { width: 100%; } + .group { + width: 100%; + .card.sm { + margin-right: 1px; + padding: 2rem; + flex-grow: 2; + width: 49%; + text-align: center; + background: $landing-sm-bg-alt; + h3 { + margin: 0 0 .5rem; + font-size: 1.1rem; + font-weight: $medium; + } + p { + opacity: .6; + position: relative; + width: auto; + margin: 0; + } + &:hover { + background: $landing-sm-bg-hover; + h3 { transform: none; } + p { opacity: 1; } + } + } + } + } +} + @include media(small) { .cards { - .group { flex-direction: column; } - .card{ - &.full { padding: 2.5rem;} - &.quarter { + .group { + flex-direction: column; + .card.sm { width: 100%; max-width: 100%; padding: 1.25rem; } + } + .card{ h1 { font-size: 2rem; } + &.main { + padding: 2.5rem; + &#get-started .btn { + font-size: 1rem; + margin: 0 0 .35rem; + } + } } } } diff --git a/assets/styles/layouts/article/_code.scss b/assets/styles/layouts/article/_code.scss index 259b81263..85a88cc2b 100644 --- a/assets/styles/layouts/article/_code.scss +++ b/assets/styles/layouts/article/_code.scss @@ -8,7 +8,7 @@ code,pre { p,li,table,h2,h3,h4,h5,h6 { code { - padding: .15rem .45rem .25rem; + padding: .1rem .4rem .2rem; border-radius: $radius; color: $article-code; white-space: nowrap; @@ -54,7 +54,9 @@ pre { overflow-y: hidden; code { padding: 0; - line-height: 1.4rem; + font-size: .95rem; + line-height: 1.5rem; + white-space: pre; } } diff --git a/assets/styles/layouts/article/_related.scss b/assets/styles/layouts/article/_related.scss new file mode 100644 index 000000000..fa8d8e14c --- /dev/null +++ b/assets/styles/layouts/article/_related.scss @@ -0,0 +1,15 @@ +.related { + border-top: 1px solid $article-hr; + padding-top: 1.5rem; + + h4 { font-size: 1.15rem; } + ul { + list-style: none; + padding: 0; + margin-top: 0; + } + li { + margin: .5rem 0; + line-height: 1.25rem; + } +} diff --git a/assets/styles/layouts/article/_tags.scss b/assets/styles/layouts/article/_tags.scss index 8c22756d8..f56f731d4 100644 --- a/assets/styles/layouts/article/_tags.scss +++ b/assets/styles/layouts/article/_tags.scss @@ -2,8 +2,8 @@ .tags { border-top: 1px solid $article-hr; - padding-top: 1.5rem; - margin-top: 2rem; + padding-top: 1.75rem; + margin: 2rem 0 1rem; .tag { background: $body-bg; @@ -15,3 +15,9 @@ font-size: .8rem; } } + +.related + .tags { + border: none; + padding-top: 0; + margin: 1.5rem 0 1rem; +} diff --git a/assets/styles/layouts/article/_telegraf-plugins.scss b/assets/styles/layouts/article/_telegraf-plugins.scss new file mode 100644 index 000000000..683d7382b --- /dev/null +++ b/assets/styles/layouts/article/_telegraf-plugins.scss @@ -0,0 +1,217 @@ +/////////////////////// Styles for Telegraf plugin cards /////////////////////// + +.plugin-card { + position: relative; + padding: 1rem 1.5rem; + margin-bottom: .5rem; + justify-content: center; + align-items: center; + background: rgba($body-bg, .4); + border-radius: $radius; + + h3 { + padding: 0; + margin-top: .25rem; + } + + &.new h3:after { + content: "New"; + margin-left: .3rem; + padding: .25rem .5rem; + font-style: italic; + color: $nav-active; + font-size: 1.2rem; + } + + p { + &.meta { + margin: .75rem 0; + font-weight: $medium; + line-height: 1.75rem; + + .deprecated { + margin-left: .5rem; + font-style: italic; + color: $article-code-accent7; + } + } + } + + & .info { + & > p:last-child { margin-bottom: .5rem; } + & > ul:last-child { margin-bottom: .5rem; } + & > ol:last-child { margin-bottom: .5rem; } + } + + .github-link { + position: absolute; + top: 0; + right: 0.5rem; + opacity: 0; + transition: opacity .2s, background .2s, color 2s; + + .icon-github { + font-size: 1.2rem; + margin: 0 .25rem 0 0; + } + } + + &:hover { + .github-link { opacity: 1; } + } + + // Special use-case for using block quotes in the yaml provided by the data file + blockquote { + border-color: $article-note-base; + background: rgba($article-note-base, .12); + h3,h4,h5,h6 { color: $article-note-heading; } + p, li { + color: $article-note-text; + font-size: 1rem; + font-style: normal; + } + strong { color: inherit; } + a { + color: $article-note-link; + code:after { + border-color: transparent rgba($article-note-code, .35) transparent transparent; + } + &:hover { + color: $article-note-link-hover; + code:after { + border-color: transparent $article-note-link-hover transparent transparent; + } + } + } + ol li:before { color: $article-note-text; } + code, pre{ + color: $article-note-code; + background: $article-note-code-bg; + } + } +} + +//////////////////////////////// Plugin Filters //////////////////////////////// + +#plugin-filters { + display: flex; + flex-flow: row wrap; + align-items: flex-start; + + .filter-category { + flex: 1 1 200px; + margin: 0 1.25rem 1.25rem 0; + max-width: 33%; + + &.two-columns { + flex: 1 2 400px; + max-width: 66%; + .filter-list { + columns: 2; + } + } + } + + h5 { + border-bottom: 1px solid rgba($article-text, .25); + padding-bottom: .65rem; + } + + .filter-list { + padding: 0; + margin: .5rem 0 0; + list-style: none; + li { + margin: 0; + line-height: 1.35rem; + } + } + + label { + display: block; + padding: .25rem 0; + color: $article-text; + position: relative; + + &:after { + content: attr(data-count); + margin-left: .25rem; + font-size: .85rem; + opacity: .5; + } + } + + .checkbox { + display: inline-block; + height: 1.15em; + width: 1.15em; + background: rgba($article-text, .05); + margin-right: .3rem; + vertical-align: text-top; + border-radius: $radius; + cursor: pointer; + border: 1.5px solid rgba($article-text, .2); + user-select: none; + } + + input[type='checkbox'] { + margin-right: -1.1rem ; + padding: 0; + vertical-align: top; + opacity: 0; + cursor: pointer; + + & + .checkbox:after { + content: ""; + display: block; + position: absolute; + height: .5rem; + width: .5rem; + border-radius: 50%; + background: $article-link; + top: .65rem; + left: .35rem; + opacity: 0; + transform: scale(2); + transition: all .2s; + } + + &:checked + .checkbox:after { + opacity: 1; + transform: scale(1); + } + } +} + +//////////////////////////////////////////////////////////////////////////////// +///////////////////////////////// MEDIA QUERIES //////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + +@media(max-width: 1100px) { + #plugin-filters { + .filter-category { + max-width: 50%; + &.two-columns, &.three-columns { + max-width: 100%; + } + } + } +} + +@include media(small) { + #plugin-filters{ + .filter-category { + max-width: 100%; + } + } + + .plugin-card { + .github-link { + opacity: 1; + padding: .25rem .35rem .35rem; + line-height: 0; + .icon-github { margin: 0; } + .hide { display: none; } + } + } +} diff --git a/assets/styles/styles-api.scss b/assets/styles/styles-api.scss new file mode 100644 index 000000000..df8888069 --- /dev/null +++ b/assets/styles/styles-api.scss @@ -0,0 +1,4 @@ +// InfluxData API Docs style overrides +// These override styles generated by ReDoc + +@import "layouts/api-overrides"; diff --git a/assets/styles/styles-default.scss b/assets/styles/styles-default.scss index d22c47221..ac37b1ae0 100644 --- a/assets/styles/styles-default.scss +++ b/assets/styles/styles-default.scss @@ -1,9 +1,10 @@ // InfluxData Docs Default Theme (Light) // Import Tools -@import "tools/icomoon"; -@import "tools/media-queries.scss"; -@import "tools/mixins.scss"; +@import "tools/icomoon", + "tools/media-queries.scss", + "tools/mixins.scss", + "tools/tooltips"; // Import default light theme @import "themes/theme-light.scss"; diff --git a/assets/styles/themes/_theme-dark.scss b/assets/styles/themes/_theme-dark.scss index 20144e52e..60f2ba14f 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; @@ -168,5 +168,17 @@ $error-page-btn-hover-text: $b-dodger; // Landing Page colors $landing-lg-gradient-left: $wp-violentdark; $landing-lg-gradient-right: $cp-minsk; -$landing-sm-gradient-overlay: $b-dodger; +$landing-sm-bg: $cp-victoria; +$landing-sm-bg-alt: $cp-victoria; +$landing-sm-bg-hover: $b-dodger; +$landing-btn-text: $g20-white; +$landing-btn-bg: $b-dodger; +$landing-btn-text-hover: $b-dodger; +$landing-btn-bg-hover: $g20-white; $landing-artwork-color: $cp-minsk; + +// Tooltip colors +$tooltip-color: $ch-chartreuse; +$tooltip-color-alt: $ch-canary; +$tooltip-bg: $g20-white; +$tooltip-text: $cp-minsk; diff --git a/assets/styles/themes/_theme-light.scss b/assets/styles/themes/_theme-light.scss index c8aec011f..b89511d8d 100644 --- a/assets/styles/themes/_theme-light.scss +++ b/assets/styles/themes/_theme-light.scss @@ -46,7 +46,7 @@ $nav-active: $m-magenta !default; // Article Content $article-bg: $g20-white !default; -$article-heading: $cp-purple !default; +$article-heading: $cp-marguerite !default; $article-heading-alt: $g7-graphite !default; $article-text: $g8-storm !default; $article-bold: $g8-storm !default; @@ -167,7 +167,19 @@ $error-page-btn-hover: $b-pool !default; $error-page-btn-hover-text: $g20-white !default; // Landing Page colors -$landing-lg-gradient-left: $cp-marguerite !default; -$landing-lg-gradient-right: $b-pool !default; -$landing-sm-gradient-overlay: $cp-blueviolet !default; +$landing-lg-gradient-left: $cp-jakarta !default; +$landing-lg-gradient-right: $wp-heart !default; +$landing-sm-bg: $wp-seance !default; +$landing-sm-bg-alt: $wp-jagger !default; +$landing-sm-bg-hover: $b-dodger !default; +$landing-btn-text: $g20-white !default; +$landing-btn-bg: $b-dodger !default; +$landing-btn-text-hover: $b-dodger !default; +$landing-btn-bg-hover: $g20-white !default; $landing-artwork-color: rgba($g20-white, .15) !default; + +// Tooltip colors +$tooltip-color: $m-magenta !default; +$tooltip-color-alt: $wp-trance !default; +$tooltip-bg: $m-lavander !default; +$tooltip-text: $g20-white !default; 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 acf227bd4..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?972u0y'); - src: url('fonts/icomoon.eot?972u0y#iefix') format('embedded-opentype'), - url('fonts/icomoon.ttf?972u0y') format('truetype'), - url('fonts/icomoon.woff?972u0y') format('woff'), - url('fonts/icomoon.svg?972u0y#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"; } @@ -216,6 +231,9 @@ .icon-loop2:before { content: "\ea2e"; } +.icon-github:before { + content: "\eab0"; +} .icon-tux:before { content: "\eabd"; } diff --git a/assets/styles/tools/_tooltips.scss b/assets/styles/tools/_tooltips.scss new file mode 100644 index 000000000..72673ff6a --- /dev/null +++ b/assets/styles/tools/_tooltips.scss @@ -0,0 +1,91 @@ +@import "themes/theme-light.scss"; + +// Font weights +$medium: 500; +$bold: 700; + +// Border radius +$radius: 3px; + +////////////////////////////////// Tool Tips ////////////////////////////////// + +.tooltip { + position: relative; + display: inline; + font-weight: $medium; + color: $tooltip-color; + + &:hover { + .tooltip-container { visibility: visible; } + .tooltip-text { + opacity: 1; + transform: translate(-50%,-2.5rem); + } + } + + .tooltip-container { + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); + overflow: visible; + visibility: hidden; + } + + .tooltip-text { + font-weight: $medium; + position: absolute; + border-radius: $radius; + padding: .15rem .75rem; + font-size: 0.9rem; + line-height: 1.75rem; + left: 50%; + transform: translate(-50%,-1.75rem); + transition: all 0.2s ease; + white-space: nowrap; + opacity: 0; + color: $tooltip-text; + background-color: $tooltip-bg; + + &:after { + content: ''; + position: absolute; + left: 50%; + bottom: -14px; + transform: translateX(-50%); + border-top: 8px solid $tooltip-bg; + border-right: 8px solid transparent; + border-bottom: 8px solid transparent; + border-left: 8px solid transparent; + } + } +} + +th .tooltip { + color: $tooltip-color-alt; + + &:hover { + .tooltip-container { visibility: visible; } + .tooltip-text { + opacity: 1; + transform: translate(-50%,1.75rem); + } + } + + .tooltip-text { + transform: translate(-50%,1rem); + + &:after { + content: ''; + position: absolute; + height: 0; + left: 50%; + top: -14px; + transform: translateX(-50%); + border-top: 8px solid transparent; + border-right: 8px solid transparent; + border-bottom: 8px solid $tooltip-bg; + border-left: 8px solid transparent; + } + } +} diff --git a/content/v2.0/_index.md b/content/v2.0/_index.md index 493c029d2..a45ca5313 100644 --- a/content/v2.0/_index.md +++ b/content/v2.0/_index.md @@ -10,8 +10,8 @@ menu: #### Welcome Welcome to the InfluxDB v2.0 documentation! -InfluxDB is an open source time series database designed to handle high write and query loads. +InfluxDB is an open source time series database designed to handle high write and query workloads. This documentation is meant to help you learn how to use and leverage InfluxDB to meet your needs. -Common use cases include infrastructure monitoring, IoT data collection, events handling and more. +Common use cases include infrastructure monitoring, IoT data collection, events handling, and more. If your use case involves time series data, InfluxDB is purpose-built to handle it. diff --git a/content/v2.0/cloud/about/_index.md b/content/v2.0/cloud/about/_index.md deleted file mode 100644 index 523c5d176..000000000 --- a/content/v2.0/cloud/about/_index.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: About InfluxDB Cloud 2.0 -description: Important information about InfluxDB Cloud 2.0 including release notes and known issues. -weight: 10 -menu: - v2_0_cloud: - name: About InfluxDB Cloud ---- - -Important information about InfluxDB Cloud 2.0 including known issues and release notes. - -{{< children >}} diff --git a/content/v2.0/cloud/about/known-issues.md b/content/v2.0/cloud/about/known-issues.md deleted file mode 100644 index 234ab8324..000000000 --- a/content/v2.0/cloud/about/known-issues.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Known issues in InfluxDB Cloud -description: Information related to known issues in InfluxDB Cloud 2. -weight: 102 -menu: - v2_0_cloud: - name: Known issues - parent: About InfluxDB Cloud ---- - -The following issues currently exist in {{< cloud-name >}}: - -- IDPE 2868: Users can delete a token with an active Telegraf configuration pointed to it. -- [TELEGRAF-5600](https://github.com/influxdata/telegraf/issues/5600): Improve error message in Telegraf when the bucket it's reporting to is not found. -- [INFLUXDB-12687](https://github.com/influxdata/influxdb/issues/12687): Create organization button should only be displayed for users with permissions to create an organization. diff --git a/content/v2.0/cloud/account-management/_index.md b/content/v2.0/cloud/account-management/_index.md new file mode 100644 index 000000000..2656f9d89 --- /dev/null +++ b/content/v2.0/cloud/account-management/_index.md @@ -0,0 +1,12 @@ +--- +title: Manage your InfluxDB Cloud 2.0 Account +description: > + View and manage information related to your InfluxDB Cloud 2.0 account such as + pricing plans, data usage, account cancelation, etc. +weight: 3 +menu: + v2_0_cloud: + name: Account management +--- + +{{< children >}} diff --git a/content/v2.0/cloud/account-management/billing.md b/content/v2.0/cloud/account-management/billing.md new file mode 100644 index 000000000..de4e41ff4 --- /dev/null +++ b/content/v2.0/cloud/account-management/billing.md @@ -0,0 +1,99 @@ +--- +title: Add payment method and view billing +list_title: Add payment and view billing +description: > + Add your InfluxDB Cloud payment method and view billing information. +weight: 103 +menu: + v2_0_cloud: + parent: Account management + name: Add payment and view billing +--- + +- Hover over the **Usage** icon in the left navigation bar and select **Billing**. + + {{< nav-icon "cloud" >}} + + Complete the following procedures as needed: + + - [Add or update your {{< cloud-name >}} payment method](#add-or-update-your-influxdb-cloud-2-0-payment-method) + - [Add or update your contact information](#add-or-update-your-contact-information) + - [Send notifications when usage exceeds an amount](#send-notifications-when-usage-exceeds-an-amount) + + View information about: + + - [Pay As You Go billing](#view-pay-as-you-go-billing-information) + - [Free plan](#view-free-plan-information) + - [Exceeded rate limits](#exceeded-rate-limits) + - [Billing cycle](#billing-cycle) + - [Declined or late payments](#declined-or-late-payments) + +### Add or update your InfluxDB Cloud 2.0 payment method + +1. On the Billing page: + - To update, click the **Change Payment** button on the Billing page. + - In the **Payment Method** section: + - Enter your cardholder name and number + - Select your expiration month and year + - Enter your CVV code and select your card type + - Enter your card billing address + +2. Click **Add Card**. + +### Add or update your contact information + +1. On the Billing page: + - To update, click the **Edit Information** button. + - In the **Contact Information** section, enter your name, company, and address. +2. Click **Save Contact Info**. + +### Send notifications when usage exceeds an amount + +1. On the Billing page, click **Notification Settings**. +2. Select the **Send email notification** toggle, and then enter the email address to notify. +3. Enter the dollar amount to trigger a notification email. By default, an email is triggered when the amount exceeds $10. (Whole dollar amounts only. For example, $10.50 is not a supported amount.) + +### View Pay As You Go billing information + +- On the Billing page, view your billing information, including: + - Account balance + - Last billing update (updated hourly) + - Past invoices + - Payment method + - Contact information + - Notification settings + +### View Free plan information + +- On the Billing page, view the total limits available for the Free plan. + +### Exceeded rate limits + +If you exceed your plan's [rate limits](/v2.0/cloud/pricing-plans/), {{< cloud-name >}} provides a notification in the {{< cloud-name "short" >}} user interface (UI) and adds a rate limit event to your **Usage** page for review. + +All rate-limited requests are rejected; including both read and write requests. +_Rate-limited requests are **not** queued._ + +_To remove rate limits, [upgrade to a Pay As You Go Plan](/v2.0/cloud/account-management/upgrade-to-payg/)._ + +#### Rate-limited HTTP response code + +When a request exceeds your plan's rate limit, the InfluxDB API returns the following response: + +``` +HTTP 429 “Too Many Requests” +Retry-After: xxx (seconds to wait before retrying the request) +``` + +### Billing cycle + +Billing occurs on the first day of the month for the previous month. For example, if you start the Pay As You Go plan on September 15, you're billed on October 1 for your usage from September 15-30. + +### Declined or late payments + +| Timeline | Action | +|:----------------------------|:------------------------------------------------------------------------------------------------------------------------| +| **Initial declined payment**| We'll retry charge every 72 hours. During this period, update your payment method to successfully process your payment. | +| **One week later** | Account disabled except data writes. Update your payment method to successfully process your payment and enable your account. | +| **10-14 days later** | Account completely disabled. During this period, you must contact us at support@influxdata.com to process your payment and enable your account. | +| **21 days later** | Account suspended. Contact support@influxdata.com to settle your final bill and retrieve a copy of your data or access to InfluxDB Cloud dashboards, tasks, Telegraf configurations, and so on.| diff --git a/content/v2.0/cloud/account-management/data-usage.md b/content/v2.0/cloud/account-management/data-usage.md new file mode 100644 index 000000000..eb5a8c1e5 --- /dev/null +++ b/content/v2.0/cloud/account-management/data-usage.md @@ -0,0 +1,49 @@ +--- +title: View InfluxDB Cloud data usage +list_title: View data usage +description: > + View your InfluxDB Cloud 2.0 data usage and rate limit notifications. +weight: 103 +menu: + v2_0_cloud: + parent: Account management + name: View data usage +--- + +To view your {{< cloud-name >}} data usage, hover over the **Usage** icon in the +left navigation bar and select **Usage**. + +{{< nav-icon "usage" >}} + +The usage page provides data usage information for time frame specified in the +drop-down at the top of the Usage page. + +- **Writes:** Total data in MB written to your {{< cloud-name "short" >}} instance. +- **Reads:** Total data in MB sent as responses to queries from your {{< cloud-name "short" >}} instance. +- **Query Duration:** Total time spent processing queries in seconds. +- **Storage Usage:** Total disk usage in gigabytes. +- **API Request Count:** The total number of query and write API requests received + during the specified time frame. +- **Usage over the specified time period:** A line graph that visualizes usage over the specified time period. +- **Rate Limits over the specified time period:** A list of rate limit events over + the specified time period. + +{{< img-hd src="/img/2-0-cloud-usage.png" />}} + +## Exceeded rate limits +If you exceed your plan's [rate limits](/v2.0/cloud/pricing-plans/), {{< cloud-name >}} +will provide a notification in the {{< cloud-name "short" >}} user interface (UI) +and add a rate limit event to your **Usage** page for review. + +All rate-limited requests are rejected; including both read and write requests. +_Rate-limited requests are **not** queued._ + +_To remove rate limits, [upgrade to a Pay As You Go Plan](/v2.0/cloud/account-management/upgrade-to-payg/)._ + +### Rate-limited HTTP response code +When a request exceeds your plan's rate limit, the InfluxDB API returns the following response: + +``` +HTTP 429 “Too Many Requests” +Retry-After: xxx (seconds to wait before retrying the request) +``` diff --git a/content/v2.0/cloud/account-management/offboarding.md b/content/v2.0/cloud/account-management/offboarding.md new file mode 100644 index 000000000..6dbe5a601 --- /dev/null +++ b/content/v2.0/cloud/account-management/offboarding.md @@ -0,0 +1,63 @@ +--- +title: Cancel your InfluxDB Cloud subscription +description: > + Cancel your InfluxDB Cloud 2.0 account at any time by stopping all read and write + requests, backing up data, and contacting InfluxData Support. +weight: 104 +menu: + v2_0_cloud: + parent: Account management + name: Cancel InfluxDB Cloud +--- + +To cancel your {{< cloud-name >}} subscription, complete the following steps: + +1. [Stop reading and writing data](#stop-reading-and-writing-data). +2. [Export data and other artifacts](#export-data-and-other-artifacts). +3. [Cancel service](#cancel-service). + +### Stop reading and writing data + +To stop being charged for {{< cloud-name "short" >}}, pause all writes and queries. + +### Export data and other artifacts + +To export data and artifacts, follow the steps below. + +{{% note %}} +Exported data and artifacts can be used in an InfluxDB OSS instance. +{{% /note %}} + +#### Export tasks + +For details, see [Export a task](/v2.0/process-data/manage-tasks/export-task/). + +#### Export dashboards + +For details, see [Export a dashboard](/v2.0/visualize-data/dashboards/export-dashboard/). + +#### Telegraf configurations + +**To save a Telegraf configuration:** + +1. Click in the **Settings** icon in the navigation bar. + + {{< nav-icon "settings" >}} + +2. Select the **Telegraf** tab. A list of existing Telegraf configurations appears. +3. Click on the name of a Telegraf configuration. +4. Click **Download Config** to save. + +#### Data backups + +To request a backup of data in your {{< cloud-name "short" >}} instance, contact [InfluxData Support](mailto:support@influxdata.com). + +### Cancel service + +1. Hover over the Usage icon in the left navigation bar and select Billing. + + {{< nav-icon "usage" >}} + +2. Click **Cancel Service**. +3. Select **I understand and agree to these conditions**, and then click **I understand, Cancel Service.** +4. Click **Confirm and Cancel Service**. Your payment method is charged your final balance immediately upon cancellation of service. diff --git a/content/v2.0/cloud/account-management/upgrade-to-payg.md b/content/v2.0/cloud/account-management/upgrade-to-payg.md new file mode 100644 index 000000000..0d21a880c --- /dev/null +++ b/content/v2.0/cloud/account-management/upgrade-to-payg.md @@ -0,0 +1,30 @@ +--- +title: Upgrade to a Pay As You Go Plan +description: > + Upgrade to a Pay As You Go Plan to remove rate limits from your InfluxDB Cloud 2.0 account. +weight: 102 +menu: + v2_0_cloud: + parent: Account management + name: Upgrade to Pay As You Go +--- + +To upgrade to a Pay As You Go Plan: + +1. Hover over the **Usage** icon in the left navigation bar and select **Billing**. + + {{< nav-icon "usage" >}} + +2. Click **Upgrade to Pay As You Go**. +3. Review the terms and pricing associated with the Pay As You Go Plan. +4. Click **Sounds Good To Me**. +5. Enter your contact information. + Traditionally this would be "shipping" information, but InfluxData does not ship anything. + This information should be the primary location where the service is consumed. + All service updates, security notifications and other important information are + sent using the information you provide. + The address is used to determine any applicable sales tax. +security notifications, etc. +6. Enter your payment information and click **Add Card**. +7. Review the plan details, contact information, and credit card information. +8. Click **Confirm & Order**. diff --git a/content/v2.0/cloud/get-started.md b/content/v2.0/cloud/get-started.md index d8d2d25a4..7a1e9fb23 100644 --- a/content/v2.0/cloud/get-started.md +++ b/content/v2.0/cloud/get-started.md @@ -1,93 +1,142 @@ --- -title: Get started with InfluxDB Cloud 2.0 Beta +title: Get started with InfluxDB Cloud 2.0 description: > - Sign up for and get started with InfluxDB Cloud 2.0 Beta. + Sign up now, sign in, and get started exploring and using the InfluxDB Cloud 2.0 time series platform. weight: 1 menu: v2_0_cloud: name: Get started with InfluxDB Cloud --- -{{< cloud-name >}} is a fully managed and hosted version of the InfluxDB 2.0. -To get started, complete the tasks below. -{{% cloud-msg %}} -InfluxDB v2.0 alpha documentation applies to {{< cloud-name "short" >}} unless otherwise specified. -{{% /cloud-msg %}} +{{< cloud-name >}} is a fully managed, hosted, multi-tenanted version of the +InfluxDB 2.0 time series data platform. +The core of {{< cloud-name "short" >}} is built on the foundation of the open source +version of InfluxDB 2.0, which is much more than a database. +It is a time series data platform that collects, stores, processes and visualizes metrics and events. + +_See the differences between {{< cloud-name "short">}} and InfluxDB OSS +[below](#differences-between-influxdb-cloud-and-influxdb-oss)._ + +## Start for free +Start using {{< cloud-name >}} at no cost with the [Free Plan](/v2.0/cloud/pricing-plans/#free-plan). +Use it as much and as long as you like within the plan's rate-limits. +Limits are designed to let you monitor 5-10 sensors, stacks or servers comfortably. +Once you're ready to grow, [upgrade to the Pay As You Go Plan](/v2.0/cloud/account-management/upgrade-to-payg/). ## Sign up -1. Go to [InfluxDB Cloud 2.0]({{< cloud-link >}}), enter your email and password, - and then click **Sign Up**. +1. Go to [InfluxDB Cloud 2.0]({{< cloud-link >}}), enter your email address and password, + and click **Sign Up**. +2. InfluxDB Cloud requires email verification to complete the sign up process. + Verify your email address by opening the email sent to the address you provided + and clicking **Verify Your Email**. +3. Select a region for you {{< cloud-name >}} instance. + Currently, {{< cloud-name >}} AWS - US West (Oregon) is the only region available. + _To suggest regions to add, click **Let us know** under Regions._ +4. Review the terms of the agreement, and then select + **I have viewed and agree to InfluxDB Cloud 2.0 Services Subscription Agreement + and InfluxData Global Data Processing Agreement.**. -2. Open email from cloudbeta@influxdata.com (subject: Please verify your email for InfluxDB Cloud), - and then click **Verify Your Email**. The Welcome to InfluxDB Cloud 2.0 page is displayed. + For details on the agreements, see the [InfluxDB Cloud 2.0: Services Subscription Agreement](https://www.influxdata.com/legal/terms-of-use/) + and the [InfluxData Global Data Processing Agreement](https://www.influxdata.com/legal/influxdata-global-data-processing-agreement/). -3. Currently, {{< cloud-name >}} us-west-2 region is the only region available. - To suggest regions to add, click the **Let us know** link under Regions. +5. Click **Continue**. {{< cloud-name >}} opens with a default organization + and bucket (both created from your email address). -4. Review the terms of the beta agreement, and then select - **I viewed and agree to InfluxDB Cloud 2.0 Beta Agreement**. + _To update organization and bucket names, see [Update an organization](/v2.0/organizations/update-org/) + and [Update a bucket](/v2.0/organizations/buckets/update-bucket/#update-a-bucket-s-name-in-the-influxdb-ui)._ -5. Click **Continue**. InfluxDB Cloud 2.0 opens with a default organization - (created from your email) and bucket (created from your email local-part). +{{% cloud-msg %}} +All InfluxDB 2.0 documentation applies to {{< cloud-name "short" >}} unless otherwise specified. +References to the InfluxDB user interface (UI) or localhost:9999 refer to your +{{< cloud-name >}} UI. +{{% /cloud-msg %}} -## Log in -Log in to [InfluxDB Cloud 2.0](https://us-west-2-1.aws.cloud2.influxdata.com) using the credentials created above. +## Sign in + +Sign in to [InfluxDB Cloud 2.0](https://cloud2.influxdata.com) using your email address and password. + +Sign in to InfluxDB Cloud 2.0 now ## Collect and write data -Collect and write data to InfluxDB using Telegraf, the InfluxDB v2 API, `influx` -command line interface (CLI), the InfluxDB user interface (UI), or client libraries. + +Collect and write data to InfluxDB using the Telegraf plugins, the InfluxDB v2 API, the `influx` +command line interface (CLI), the InfluxDB UI (the user interface for InfluxDB 2.0), or the InfluxDB v2 API client libraries. ### Use Telegraf + Use Telegraf to quickly write data to {{< cloud-name >}}. -Create new Telegraf configurations automatically in the UI or manually update an +Create new Telegraf configurations automatically in the InfluxDB UI, or manually update an existing Telegraf configuration to send data to your {{< cloud-name "short" >}} instance. For details, see [Automatically configure Telegraf](/v2.0/write-data/use-telegraf/auto-config/#create-a-telegraf-configuration) and [Manually update Telegraf configurations](/v2.0/write-data/use-telegraf/manual-config/). ### API, CLI, and client libraries -For information about using the InfluxDB API, CLI, and client libraries to write data, + +For information about using the InfluxDB v2 API, `influx` CLI, and client libraries to write data, see [Write data to InfluxDB](/v2.0/write-data/). {{% note %}} + #### InfluxDB Cloud instance endpoint -When using Telegraf, the API, CLI, or client libraries to interact with your {{< cloud-name "short" >}} + +When using Telegraf, the InfluxDB v2 API, the `influx` CLI, or the client libraries to interact with your {{< cloud-name "short" >}} instance, extract the "host" or "endpoint" of your instance from your {{< cloud-name "short" >}} UI URL. For example: ``` https://us-west-2-1.aws.cloud2.influxdata.com ``` + {{% /note %}} ## Query and visualize data + Once you've set up {{< cloud-name "short" >}} to collect data, you can do the following: -- Query data using Flux, the UI, and the `influx` command line interface. See [Query data](/v2.0/query-data/). -- Build custom dashboards to visualize your data. See [Visualize data](/v2.0/visualize-data/). +- Query data using Flux, the UI, and the `influx` command line interface. + See [Query data](/v2.0/query-data/). +- Build custom dashboards to visualize your data. + See [Visualize data](/v2.0/visualize-data/). + +## Process data + +Use InfluxDB tasks to process and downsample data. See [Process data](/v2.0/process-data/). ## View data usage -Once you've set up {{< cloud-name "short" >}} to collect data, view your data usage, including: -- **Writes:** Total kilobytes ingested. -- **Reads:** Total kilobytes sent out for responses to queries. -- **Total Query Duration:** Sum of time spent processing queries in seconds. -- **Storage:** Average disk usage in gigabytes. +Once you're up and running with {{< cloud-name "short" >}}, [monitor your data usage in +your {{< cloud-name "short" >}} UI](/v2.0/cloud/account-management/data-usage/). -You'll see sparkline data over the past 4 hours and a single value that shows usage in the last 5 minutes. -To view your data, click **Usage** in the left navigation menu. +## Differences between InfluxDB Cloud and InfluxDB OSS +{{< cloud-name >}} is API-compatible and functionally compatible with InfluxDB OSS 2.0. +The primary differences between InfluxDB OSS 2.0 and InfluxDB Cloud 2.0 are: -{{< img-hd src="/img/2-0-cloud-usage.png" />}} +- [InfluxDB scrapers](/v2.0/write-data/scrape-data/) that collect data from specified + targets are not available in {{< cloud-name "short" >}}. +- {{< cloud-name "short" >}} instances are currently limited to a single organization with a single user. +- Retrieving data from a file based CSV source using the `file` parameter of the + [`csv.from()`](/v2.0/reference/flux/functions/csv/from) function is not supported; + however you can use raw CSV data with the `csv` parameter. +- Multi-organization accounts and multi-user organizations are currently not + available in {{< cloud-name >}}. -## Review rate limits -To optimize InfluxDB Cloud 2.0 services, [rate limits](/v2.0/cloud/rate-limits/) are in place for Free tier users. -During beta, you can check out our Paid tier for free. +### New features in InfluxDB Cloud 2.0 -To upgrade to Paid tier for free, discuss use cases, or increase rate limits, -reach out to cloudbeta@influxdata.com. - -{{% note %}} -#### Known issues and disabled features -_See [Known issues](/v2.0/cloud/about/known-issues/) for information regarding all known issues in InfluxDB Cloud._ -{{% /note %}} +- **Free Plan (rate-limited)**: Skip downloading and installing InfluxDB 2.0 and + jump right in to exploring InfluxDB 2.0 technology. + The Free Plan is designed for getting started with InfluxDB and for small hobby projects. +- **Flux support**: [Flux](/v2.0/query-data/get-started/) is a standalone data + scripting and query language that increases productivity and code reuse. + It is the primary language for working with data within InfluxDB 2.0. + Flux can be used with other data sources as well. + This allows users to work with data where it resides. +- **Unified API**: Everything in InfluxDB (ingest, query, storage, and visualization) + is now accessible using a unified [InfluxDB v2 API](/v2.0/reference/api/) that + enables seamless movement between open source and cloud. +- **Integrated visualization and dashboards**: Based on the pioneering Chronograf project, + the new user interface (InfluxDB UI) offers quick and effortless onboarding, + richer user experiences, and significantly quicker results. +- **Usage-based pricing**: The [The Pay As You Go Plan](/v2.0/cloud/pricing-plans/#pay-as-you-go-plan) + offers more flexibility and ensures that you only pay for what you use. To estimate your projected usage costs, use the [InfluxDB Cloud 2.0 pricing calculator](/v2.0/cloud/pricing-calculator/). diff --git a/content/v2.0/cloud/pricing-calculator.md b/content/v2.0/cloud/pricing-calculator.md new file mode 100644 index 000000000..bca77ea4b --- /dev/null +++ b/content/v2.0/cloud/pricing-calculator.md @@ -0,0 +1,49 @@ +--- +title: InfluxDB Cloud 2.0 pricing calculator +description: > + Use the InfluxDB Cloud 2.0 pricing calculator to estimate costs by adjusting the number of devices, + plugins, metrics, and writes for the Pay As You Go Plan. +weight: 2 +menu: + v2_0_cloud: + name: Pricing calculator +--- + +Use the {{< cloud-name >}} pricing calculator to estimate costs for the Pay As You Go plan by adjusting your number of devices, + plugins, users, dashboards, writes, and retention. Default configurations include: + +| Configuration | Hobby | Standard | Professional | Enterprise | +|:-----------------------------------|-------:|---------:|-------------:|-----------:| +| **Devices** | 8 | 200 | 500 | 1000 | +| **Plugins per device** | 1 | 4 | 4 | 5 | +| **Users** | 1 | 2 | 10 | 20 | +| **Concurrent dashboards per user** | 2 | 2 | 2 | 2 | +| **Writes per minute** | 6 | 4 | 3 | 3 | +| **Average retention in days** | 7 | 30 | 30 | 30 | + +Guidelines used to estimate costs for default configurations: + +- Average metrics per plugin = 25 +- Average KB per value = 0.01 +- Number of cells per dashboard = 10 +- Average response KB per cell = 0.5 +- Average query duration = 75ms + +**To estimate costs** + +1. Do one of the following: + + - Free plan. Hover over the **Usage** icon in the left navigation bar and select **Billing**. + + {{< nav-icon "cloud" >}} + + Then click the **Pricing Calculator** link at the bottom of the page. + - Pay As You Go plan. Open the pricing calculator [here](https://cloud2.influxdata.com/pricing). +3. Choose your region. +4. Select your configuration: + - **Hobby**. For a single user monitoring a few machines or sensors. + - **Standard**. For a single team requiring real-time visibility and monitoring a single set of use cases. + - **Professional**. For teams monitoring multiple disparate systems or use cases. + - **Enterprise**. For teams monitoring multiple domains and use cases accessing a variety of dashboards. +5. Adjust the default configuration values to match your number of devices, plugins, metrics, and so on. The **Projected Usage** costs are automatically updated as you adjust your configuration. +6. Click **Get started with InfluxDB Cloud** [to get started](https://v2.docs.influxdata.com/v2.0/cloud/get-started/). diff --git a/content/v2.0/cloud/pricing-plans.md b/content/v2.0/cloud/pricing-plans.md new file mode 100644 index 000000000..3582ffd0b --- /dev/null +++ b/content/v2.0/cloud/pricing-plans.md @@ -0,0 +1,65 @@ +--- +title: InfluxDB Cloud 2.0 pricing plans +description: > + InfluxDB Cloud 2.0 provides two pricing plans to fit your needs – the rate-limited + Free Plan and the Pay As You Go Plan. +aliases: + - /v2.0/cloud/rate-limits/ +weight: 2 +menu: + v2_0_cloud: + name: Pricing plans +--- + +InfluxDB Cloud 2.0 offers two pricing plans: + +- [Free Plan](#free-plan) +- [Pay As You Go Plan](#pay-as-you-go-plan) + +To estimate your projected usage costs, use the [InfluxDB Cloud 2.0 pricing calculator](/v2.0/cloud/pricing-calculator/). + +## Free Plan + +All new {{< cloud-name >}} accounts start with a rate-limited Free Plan. +Use this plan as much and as long as you want within the Free Plan rate limits: + +#### Free Plan rate limits + +- **Writes:** 3MB every 5 minutes +- **Query:** 30MB every 5 minutes +- **Storage:** 72-hour data retention +- **Series cardinality:** 10,000 +- **Create:** + - Up to 5 dashboards + - Up to 5 tasks + - Up to 2 buckets + - Up to 2 checks + - Up to 2 notification rules + - Unlimited Slack notification endpoints + + +_To remove rate limits, [upgrade to a Pay As You Go Plan](/v2.0/cloud/account-management/upgrade-to-payg/)._ + +## Pay As You Go Plan + +The Pay As You Go Plan offers more flexibility and ensures you only pay for what you [use]((/v2.0/cloud/account-management/data-usage/). + +#### Pay As You Go Plan rate limits + +To protect against any intentional or unintentional harm, Pay As You Go Plans include soft rate limits: + +- **Writes:** 300MB every 5 minutes +- **Ingest batch size:** 50MB +- **Queries:** 3000MB every 5 minutes +- **Storage:** Unlimited retention +- **Series cardinality:** 1,000,000 +- **Create:** + - Unlimited dashboards + - Unlimited tasks + - Unlimited buckets + - Unlimited users + - Unlimited checks + - Unlimited notification rules + - Unlimited PagerDuty, Slack, and HTTP notification endpoints + +_To request higher rate limits, contact [InfluxData Support](mailto:support@influxdata.com)._ diff --git a/content/v2.0/cloud/rate-limits.md b/content/v2.0/cloud/rate-limits.md deleted file mode 100644 index d6646553a..000000000 --- a/content/v2.0/cloud/rate-limits.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: InfluxDB Cloud 2.0 rate limits -description: Rate limits for Free tier users optimize InfluxDB Cloud 2.0 services. -weight: 2 -menu: - v2_0_cloud: - name: Rate limits ---- - -To optimize InfluxDB Cloud 2.0 services, the following rate limits are in place for Free tier users. -To increase your rate limits, contact cloudbeta@influxdata.com. - -- `write` endpoint: - - 5 concurrent API calls - - 3000 KB (10 KB/s) of data written in a 5 minute window - -- `query` endpoint: - - 20 concurrent API calls - - 3000 MB (10 MB/s) of data returned in a 5 minute window - -- 5 dashboards -- 5 tasks -- 2 buckets -- 72 hour retention period - -## View data usage -To view data usage, click **Usage** in the left navigation bar. - -{{< nav-icon "usage" >}} - -## HTTP response codes - -When a request exceeds the rate limit for the endpoint, the InfluxDB API returns: - -- HTTP 429 “Too Many Requests” -- Retry-After: xxx (seconds to wait before retrying the request) diff --git a/content/v2.0/example.md b/content/v2.0/example.md index 0c7560752..9793b5679 100644 --- a/content/v2.0/example.md +++ b/content/v2.0/example.md @@ -10,7 +10,11 @@ enterprise_all: true #cloud_all: true cloud_some: true draft: true -"v2.0/tags": [influxdb] +"v2.0/tags": [influxdb, functions] +related: + - /v2.0/write-data/ + - /v2.0/write-data/quick-start + - https://influxdata.com, This is an external link --- This is a paragraph. Lorem ipsum dolor ({{< icon "trash" >}}) sit amet, consectetur adipiscing elit. Nunc rutrum, metus id scelerisque euismod, erat ante suscipit nibh, ac congue enim risus id est. Etiam tristique nisi et tristique auctor. Morbi eu bibendum erat. Sed ullamcorper, dui id lobortis efficitur, mauris odio pharetra neque, vel tempor odio dolor blandit justo. diff --git a/content/v2.0/get-started.md b/content/v2.0/get-started.md index f886dc036..539d98f6c 100644 --- a/content/v2.0/get-started.md +++ b/content/v2.0/get-started.md @@ -27,7 +27,7 @@ This article describes how to get started with InfluxDB OSS. To get started with ### Download and install InfluxDB v2.0 alpha Download InfluxDB v2.0 alpha for macOS. -InfluxDB v2.0 alpha (macOS) +InfluxDB v2.0 alpha (macOS) ### Unpackage the InfluxDB binaries Unpackage the downloaded archive. @@ -36,7 +36,7 @@ _**Note:** The following commands are examples. Adjust the file paths to your ow ```sh # Unpackage contents to the current working directory -gunzip -c ~/Downloads/influxdb_2.0.0-alpha.8_darwin_amd64.tar.gz | tar xopf - +gunzip -c ~/Downloads/influxdb_2.0.0-alpha.18_darwin_amd64.tar.gz | tar xopf - ``` If you choose, you can place `influx` and `influxd` in your `$PATH`. @@ -44,7 +44,7 @@ You can also prefix the executables with `./` to run then in place. ```sh # (Optional) Copy the influx and influxd binary to your $PATH -sudo cp influxdb_2.0.0-alpha.8_darwin_amd64/{influx,influxd} /usr/local/bin/ +sudo cp influxdb_2.0.0-alpha.18_darwin_amd64/{influx,influxd} /usr/local/bin/ ``` {{% note %}} @@ -90,8 +90,8 @@ influxd --reporting-disabled ### Download and install InfluxDB v2.0 alpha Download the InfluxDB v2.0 alpha package appropriate for your chipset. -InfluxDB v2.0 alpha (amd64) -InfluxDB v2.0 alpha (arm) +InfluxDB v2.0 alpha (amd64) +InfluxDB v2.0 alpha (arm) ### Place the executables in your $PATH Unpackage the downloaded archive and place the `influx` and `influxd` executables in your system `$PATH`. @@ -100,10 +100,10 @@ _**Note:** The following commands are examples. Adjust the file names, paths, an ```sh # Unpackage contents to the current working directory -tar xvzf path/to/influxdb_2.0.0-alpha.10_linux_amd64.tar.gz +tar xvzf path/to/influxdb_2.0.0-alpha.18_linux_amd64.tar.gz # Copy the influx and influxd binary to your $PATH -sudo cp influxdb_2.0.0-alpha.10_linux_amd64/{influx,influxd} /usr/local/bin/ +sudo cp influxdb_2.0.0-alpha.18_linux_amd64/{influx,influxd} /usr/local/bin/ ``` {{% note %}} diff --git a/content/v2.0/monitor-alert/_index.md b/content/v2.0/monitor-alert/_index.md new file mode 100644 index 000000000..cd52ba5b2 --- /dev/null +++ b/content/v2.0/monitor-alert/_index.md @@ -0,0 +1,38 @@ +--- +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] +--- + +Monitor your time series data and send alerts by creating checks, notification +rules, and notification endpoints. + +## The monitoring workflow + +1. A [check](/v2.0/reference/glossary/#check) in InfluxDB queries data and assigns a status with a `_level` based on specific conditions. +2. InfluxDB stores the output of a 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 on 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..2c84bb054 --- /dev/null +++ b/content/v2.0/monitor-alert/checks/_index.md @@ -0,0 +1,19 @@ +--- +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/ +--- + +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..c2b8964f1 --- /dev/null +++ b/content/v2.0/monitor-alert/checks/create.md @@ -0,0 +1,155 @@ +--- +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/ +--- + +Create a check in the InfluxDB user interface (UI). +Checks query data and apply a status to each point based on specified conditions. + +## Check types +There are two types of checks – a threshold check and a deadman check. + +#### Threshold check +A threshold check assigns a status based on a value being above, below, +inside, or outside of defined thresholds. +[Create a threshold check](#create-a-threshold-check). + +#### Deadman check +A deadman check assigns a status to data when a series or group doesn't report +in a specified amount of time. +[Create a deadman check](#create-a-deadman-check). + +## Parts of a check +A check consists of two parts – a query and check configuration. + +#### Check query +- Specifies the dataset to monitor. +- 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` + - `ok` +- Stores status in the `_level` column. + +## Create a check in the InfluxDB UI +1. Click **Monitoring & Alerting** in the sidebar in the InfluxDB UI. + + {{< nav-icon "alerts" >}} + +2. In the top right corner of the **Checks** column, click **{{< icon "plus" >}} Create** + and select the [type of check](#check-types) to create. +3. Click **Name this check** in the top left corner and provide a unique name for the check. + +#### Configure the check query +1. Select the **bucket**, **measurement**, **field** and **tag sets** to query. +2. If creating a threshold check, select an **aggregate function**. + Aggregate functions aggregate data between the specified check intervals and + return a single value for the check to process. + + 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 **{{< icon "toggle" >}} View Raw Data** toggle. + +#### Configure the check +1. Click **2. Check** near the top of the window. +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/stdlib/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. Define check conditions that assign statuses to points. + Condition options depend on your check type. + + ##### Configure a threshold check + 1. In the **Thresholds** column, click the status name (CRIT, WARN, INFO, or OK) + to define conditions for that specific status. + 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 **Deadman** column, enter a duration for the deadman check in the **for** field. + For example, `90s`, `5m`, `2h30m`, etc. + 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`, etc. + +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..8e884679f --- /dev/null +++ b/content/v2.0/monitor-alert/checks/delete.md @@ -0,0 +1,34 @@ +--- +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/ +--- + +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..d2c9af61c --- /dev/null +++ b/content/v2.0/monitor-alert/checks/update.md @@ -0,0 +1,62 @@ +--- +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/ +--- + +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..a41f90713 --- /dev/null +++ b/content/v2.0/monitor-alert/checks/view.md @@ -0,0 +1,43 @@ +--- +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/ +--- + +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..f3d6fef42 --- /dev/null +++ b/content/v2.0/monitor-alert/notification-endpoints/_index.md @@ -0,0 +1,20 @@ +--- +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/ +--- + +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..829158886 --- /dev/null +++ b/content/v2.0/monitor-alert/notification-endpoints/create.md @@ -0,0 +1,45 @@ +--- +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/ +--- + +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** | **{{< icon "check" >}}** | **{{< icon "check" >}}** | **{{< icon "check" >}}** | + | **PagerDuty** | **{{< icon "check" >}}** | | **{{< icon "check" >}}** | + | **HTTP** | **{{< icon "check" >}}** | | **{{< 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. + - The **Client URL** provides a useful link in your PagerDuty notification. Enter any URL that you'd like to use to investigate issues. This URL is sent as the `client_url` property in the PagerDuty trigger event. By default, the **Client URL** is set to your Monitoring & Alerting History page, and the following included in the PagerDuty trigger event: `"client_url": "https://twodotoh.a.influxcloud.net/orgs//alert-history”` + +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..24a0dc71b --- /dev/null +++ b/content/v2.0/monitor-alert/notification-endpoints/delete.md @@ -0,0 +1,24 @@ +--- +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/ +--- + +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..d2624e5e4 --- /dev/null +++ b/content/v2.0/monitor-alert/notification-endpoints/update.md @@ -0,0 +1,65 @@ +--- +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/ +--- + +To update the notification endpoint details, complete the procedures below as needed. To update the notification endpoint selected for a notification rule, see [update notification rules](/v2.0/monitor-alert/notification-rules/update/). + +## 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..982fa4c42 --- /dev/null +++ b/content/v2.0/monitor-alert/notification-endpoints/view.md @@ -0,0 +1,43 @@ +--- +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/ +--- + +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..bc99a9114 --- /dev/null +++ b/content/v2.0/monitor-alert/notification-rules/_index.md @@ -0,0 +1,17 @@ +--- +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/ +--- + +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..471f65aff --- /dev/null +++ b/content/v2.0/monitor-alert/notification-rules/create.md @@ -0,0 +1,42 @@ +--- +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/ +--- + +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..dea28950d --- /dev/null +++ b/content/v2.0/monitor-alert/notification-rules/delete.md @@ -0,0 +1,21 @@ +--- +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/ +--- + +## 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..f88a832d0 --- /dev/null +++ b/content/v2.0/monitor-alert/notification-rules/update.md @@ -0,0 +1,51 @@ +--- +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/ +--- + +## 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..bbbcbe130 --- /dev/null +++ b/content/v2.0/monitor-alert/notification-rules/view.md @@ -0,0 +1,42 @@ +--- +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/ +--- + +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..6616e838a 100644 --- a/content/v2.0/organizations/buckets/create-bucket.md +++ b/content/v2.0/organizations/buckets/create-bucket.md @@ -14,16 +14,16 @@ 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?**: - Select **Never** to retain data forever. - Select **Periodically** to define a specific retention policy. +5. Select when to **Delete Data**: + - **Never** to retain data forever. + - **Older than** to choose a specific retention policy. 5. Click **Create** to create the bucket. ## Create a bucket using the influx CLI @@ -32,7 +32,7 @@ Use the [`influx bucket create` command](/v2.0/reference/cli/influx/bucket/creat to create a new bucket. A bucket requires the following: - A name -- The name or ID of the organization to which it belongs +- The name or ID of the organization the bucket belongs to - A retention period in nanoseconds ```sh diff --git a/content/v2.0/organizations/buckets/delete-bucket.md b/content/v2.0/organizations/buckets/delete-bucket.md index 3622b684c..8c25b4948 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 **Confirm** 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..0bbfef353 100644 --- a/content/v2.0/organizations/buckets/update-bucket.md +++ b/content/v2.0/organizations/buckets/update-bucket.md @@ -8,6 +8,7 @@ menu: parent: Manage buckets weight: 202 --- + Use the `influx` command line interface (CLI) or the InfluxDB user interface (UI) to update a bucket. Note that updating an bucket's name will affect any assets that reference the bucket by name, including the following: @@ -23,23 +24,22 @@ 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. -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**. +2. Select **Buckets**. +3. Click **Rename** under the bucket you want to rename. +4. Review the information in the window that appears and click **I understand, let's rename my bucket**. +5. 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**. @@ -50,7 +50,7 @@ Use the [`influx bucket update` command](/v2.0/reference/cli/influx/bucket/updat to update a bucket. Updating a bucket requires the following: - The bucket ID _(provided in the output of `influx bucket find`)_ -- The name or ID of the organization to which the bucket belongs +- The name or ID of the organization the bucket belongs to. ##### Update the name of a bucket ```sh diff --git a/content/v2.0/organizations/buckets/view-buckets.md b/content/v2.0/organizations/buckets/view-buckets.md index 5d47f5211..5dd6e91a9 100644 --- a/content/v2.0/organizations/buckets/view-buckets.md +++ b/content/v2.0/organizations/buckets/view-buckets.md @@ -11,18 +11,17 @@ 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 Use the [`influx bucket find` command](/v2.0/reference/cli/influx/bucket/find) -to view a buckets in an organization. Viewing bucket requires the following: - +to view a buckets in an organization. ```sh influx bucket find diff --git a/content/v2.0/process-data/_index.md b/content/v2.0/process-data/_index.md index d16a1912f..f9374b77b 100644 --- a/content/v2.0/process-data/_index.md +++ b/content/v2.0/process-data/_index.md @@ -7,7 +7,7 @@ description: > menu: v2_0: name: Process data -weight: 5 +weight: 4 v2.0/tags: [tasks] --- diff --git a/content/v2.0/process-data/common-tasks/downsample-data.md b/content/v2.0/process-data/common-tasks/downsample-data.md index 1b84563c2..1c4d83148 100644 --- a/content/v2.0/process-data/common-tasks/downsample-data.md +++ b/content/v2.0/process-data/common-tasks/downsample-data.md @@ -32,7 +32,7 @@ A separate bucket where aggregated, downsampled data is stored. To downsample data, it must be aggregated in some way. What specific method of aggregation you use depends on your specific use case, but examples include mean, median, top, bottom, etc. -View [Flux's aggregate functions](/v2.0/reference/flux/functions/built-in/transformations/aggregates/) +View [Flux's aggregate functions](/v2.0/reference/flux/stdlib/built-in/transformations/aggregates/) for more information and ideas. ## Create a destination bucket @@ -47,7 +47,7 @@ The example task script below is a very basic form of data downsampling that doe 1. Defines a task named "cq-mem-data-1w" that runs once a week. 2. Defines a `data` variable that represents all data from the last 2 weeks in the `mem` measurement of the `system-data` bucket. -3. Uses the [`aggregateWindow()` function](/v2.0/reference/flux/functions/built-in/transformations/aggregates/aggregatewindow/) +3. Uses the [`aggregateWindow()` function](/v2.0/reference/flux/stdlib/built-in/transformations/aggregates/aggregatewindow/) to window the data into 1 hour intervals and calculate the average of each interval. 4. Stores the aggregated data in the `system-data-downsampled` bucket under the `my-org` organization. diff --git a/content/v2.0/process-data/get-started.md b/content/v2.0/process-data/get-started.md index 45bb10c7e..ef146a4ad 100644 --- a/content/v2.0/process-data/get-started.md +++ b/content/v2.0/process-data/get-started.md @@ -54,8 +54,8 @@ in form fields when creating the task. {{% /note %}} ## Define a data source -Define a data source using Flux's [`from()` function](/v2.0/reference/flux/functions/built-in/inputs/from/) -or any other [Flux input functions](/v2.0/reference/flux/functions/built-in/inputs/). +Define a data source using Flux's [`from()` function](/v2.0/reference/flux/stdlib/built-in/inputs/from/) +or any other [Flux input functions](/v2.0/reference/flux/stdlib/built-in/inputs/). For convenience, consider creating a variable that includes the sourced data with the required time range and any relevant filters. @@ -88,7 +88,7 @@ specific use case. The example below illustrates a task that downsamples data by calculating the average of set intervals. It uses the `data` variable defined [above](#define-a-data-source) as the data source. It then windows the data into 5 minute intervals and calculates the average of each -window using the [`aggregateWindow()` function](/v2.0/reference/flux/functions/built-in/transformations/aggregates/aggregatewindow/). +window using the [`aggregateWindow()` function](/v2.0/reference/flux/stdlib/built-in/transformations/aggregates/aggregatewindow/). ```js data @@ -104,7 +104,7 @@ _See [Common tasks](/v2.0/process-data/common-tasks) for examples of tasks commo In the vast majority of task use cases, once data is transformed, it needs to sent and stored somewhere. This could be a separate bucket with a different retention policy, another measurement, or even an alert endpoint _(Coming)_. -The example below uses Flux's [`to()` function](/v2.0/reference/flux/functions/built-in/outputs/to) +The example below uses Flux's [`to()` function](/v2.0/reference/flux/stdlib/built-in/outputs/to) to send the transformed data to another bucket: ```js diff --git a/content/v2.0/process-data/manage-tasks/create-task.md b/content/v2.0/process-data/manage-tasks/create-task.md index c2e0753e5..270a0d1c2 100644 --- a/content/v2.0/process-data/manage-tasks/create-task.md +++ b/content/v2.0/process-data/manage-tasks/create-task.md @@ -8,6 +8,8 @@ menu: name: Create a task parent: Manage tasks weight: 201 +related: + - /v2.0/reference/cli/influx/task/create --- InfluxDB provides multiple ways to create tasks both in the InfluxDB user interface (UI) @@ -36,9 +38,9 @@ The InfluxDB UI provides multiple ways to create a task: 3. Select the **Task** option. 4. Specify the task options. See [Task options](/v2.0/process-data/task-options) for detailed information about each option. -5. Click **Save as Task**. +5. Select a token to use from the **Token** dropdown. +6. Click **Save as Task**. -{{< img-hd src="/img/2-0-data-explorer-save-as-task.png" title="Add a task from the Data Explorer"/>}} ### Create a task in the Task UI 1. Click on the **Tasks** icon in the left navigation menu. @@ -49,10 +51,9 @@ The InfluxDB UI provides multiple ways to create a task: 3. Select **New Task**. 4. In the left panel, specify the task options. See [Task options](/v2.0/process-data/task-options) for detailed information about each option. -5. In the right panel, enter your task script. -6. Click **Save** in the upper right. - -{{< img-hd src="/img/2-0-tasks-create-edit.png" title="Create a task" />}} +5. Select a token to use from the **Token** dropdown. +6. In the right panel, enter your task script. +7. Click **Save** in the upper right. ### Import a task 1. Click on the **Tasks** icon in the left navigation menu. diff --git a/content/v2.0/process-data/manage-tasks/delete-task.md b/content/v2.0/process-data/manage-tasks/delete-task.md index f89b0981e..eab5c0a54 100644 --- a/content/v2.0/process-data/manage-tasks/delete-task.md +++ b/content/v2.0/process-data/manage-tasks/delete-task.md @@ -8,6 +8,8 @@ menu: name: Delete a task parent: Manage tasks weight: 206 +related: + - /v2.0/reference/cli/influx/task/delete --- ## Delete a task in the InfluxDB UI diff --git a/content/v2.0/process-data/manage-tasks/run-task.md b/content/v2.0/process-data/manage-tasks/run-task.md index ec975adf7..297ca4308 100644 --- a/content/v2.0/process-data/manage-tasks/run-task.md +++ b/content/v2.0/process-data/manage-tasks/run-task.md @@ -8,6 +8,9 @@ menu: name: Run a task parent: Manage tasks weight: 203 +related: + - /v2.0/reference/cli/influx/task/run + - /v2.0/reference/cli/influx/task/retry --- InfluxDB data processing tasks generally run in defined intervals or at a specific time, diff --git a/content/v2.0/process-data/manage-tasks/task-run-history.md b/content/v2.0/process-data/manage-tasks/task-run-history.md index ee4cae300..5539fc32d 100644 --- a/content/v2.0/process-data/manage-tasks/task-run-history.md +++ b/content/v2.0/process-data/manage-tasks/task-run-history.md @@ -7,6 +7,8 @@ menu: name: View run history parent: Manage tasks weight: 203 +related: + - /v2.0/reference/cli/influx/task/run/find --- When an InfluxDB task runs, a "run" record is created in the task's history. diff --git a/content/v2.0/process-data/manage-tasks/update-task.md b/content/v2.0/process-data/manage-tasks/update-task.md index 3f02ebb5a..c38c25d2c 100644 --- a/content/v2.0/process-data/manage-tasks/update-task.md +++ b/content/v2.0/process-data/manage-tasks/update-task.md @@ -8,6 +8,8 @@ menu: name: Update a task parent: Manage tasks weight: 204 +related: + - /v2.0/reference/cli/influx/task/update --- ## Update a task in the InfluxDB UI @@ -15,13 +17,14 @@ To view your tasks, click the **Tasks** icon in the left navigation menu. {{< nav-icon "tasks" >}} +Click on the name of a task to update it. + #### Update a task's Flux script 1. In the list of tasks, click the **Name** of the task you want to update. 2. In the left panel, modify the task options. 3. In the right panel, modify the task script. 4. Click **Save** in the upper right. -{{< img-hd src="/img/2-0-tasks-create-edit.png" alt="Update a task" />}} #### Update the status of a task In the list of tasks, click the {{< icon "toggle" >}} toggle to the left of the diff --git a/content/v2.0/process-data/manage-tasks/view-tasks.md b/content/v2.0/process-data/manage-tasks/view-tasks.md index 8aecb45e2..2c8c91083 100644 --- a/content/v2.0/process-data/manage-tasks/view-tasks.md +++ b/content/v2.0/process-data/manage-tasks/view-tasks.md @@ -8,6 +8,8 @@ menu: name: View tasks parent: Manage tasks weight: 202 +related: + - /v2.0/reference/cli/influx/task/find --- ## View tasks in the InfluxDB UI diff --git a/content/v2.0/query-data/execute-queries.md b/content/v2.0/query-data/execute-queries.md index 462db6f40..b558b5dcc 100644 --- a/content/v2.0/query-data/execute-queries.md +++ b/content/v2.0/query-data/execute-queries.md @@ -13,10 +13,10 @@ v2.0/tags: [query] There are multiple ways to execute queries with InfluxDB. This guide covers the different options: -1. [Data Explorer](#data-explorer) -2. [Influx REPL](#influx-repl) -3. [Influx query command](#influx-query-command) -5. [InfluxDB API](#influxdb-api) +- [Data Explorer](#data-explorer) +- [Influx REPL](#influx-repl) +- [Influx query command](#influx-query-command) +- [InfluxDB API](#influxdb-api) ## Data Explorer Queries can be built, executed, and visualized in InfluxDB UI's Data Explorer. @@ -60,35 +60,50 @@ In your request, set the following: - Your organization via the `org` or `orgID` URL parameters. - `Authorization` header to `Token ` + your authentication token. -- `accept` header to `application/csv`. -- `content-type` header to `application/vnd.flux`. +- `Accept` header to `application/csv`. +- `Content-type` header to `application/vnd.flux`. +- Your plain text query as the request's raw data. -This lets you POST the Flux query in plain text and receive the annotated CSV response. +InfluxDB returns the query results in [annotated CSV](/v2.0/reference/annotated-csv/). + +{{% note %}} +#### Use gzip to compress the query response +To compress the query response, set the `Accept-Encoding` header to `gzip`. +This saves network bandwidth, but increases server-side load. +{{% /note %}} Below is an example `curl` command that queries InfluxDB: {{< code-tabs-wrapper >}} {{% code-tabs %}} -[Multi-line](#) -[Single-line](#) +[Without compression](#) +[With compression](#) {{% /code-tabs %}} {{% code-tab-content %}} ```bash curl http://localhost:9999/api/v2/query?org=my-org -XPOST -sS \ --H 'Authorization: Token YOURAUTHTOKEN' \ --H 'accept:application/csv' \ --H 'content-type:application/vnd.flux' \ --d 'from(bucket:“test”) - |> range(start:-1000h) - |> group(columns:[“_measurement”], mode:“by”) - |> sum()' + -H 'Authorization: Token YOURAUTHTOKEN' \ + -H 'Accept: application/csv' \ + -H 'Content-type: application/vnd.flux' \ + -d 'from(bucket:"example-bucket") + |> range(start:-1000h) + |> group(columns:["_measurement"], mode:"by") + |> sum()' ``` {{% /code-tab-content %}} {{% code-tab-content %}} ```bash -curl http://localhost:9999/api/v2/query?org=my-org -XPOST -sS -H 'Authorization: Token TOKENSTRINGHERE' -H 'accept:application/csv' -H 'content-type:application/vnd.flux' -d 'from(bucket:“test”) |> range(start:-1000h) |> group(columns:[“_measurement”], mode:“by”) |> sum()' +curl http://localhost:9999/api/v2/query?org=my-org -XPOST -sS \ + -H 'Authorization: Token YOURAUTHTOKEN' \ + -H 'Accept: application/csv' \ + -H 'Content-type: application/vnd.flux' \ + -H 'Accept-Encoding: gzip' \ + -d 'from(bucket:"example-bucket") + |> range(start:-1000h) + |> group(columns:["_measurement"], mode:"by") + |> sum()' ``` {{% /code-tab-content %}} {{< /code-tabs-wrapper >}} diff --git a/content/v2.0/query-data/get-started/_index.md b/content/v2.0/query-data/get-started/_index.md index 4c85cf503..225f9fdb7 100644 --- a/content/v2.0/query-data/get-started/_index.md +++ b/content/v2.0/query-data/get-started/_index.md @@ -9,13 +9,16 @@ menu: v2_0: name: Get started with Flux parent: Query data +related: + - /v2.0/reference/flux/ + - /v2.0/reference/flux/stdlib/ --- Flux is InfluxData's functional data scripting language designed for querying, analyzing, and acting on data. -This multi-part getting started guide walks through important concepts related to Flux, -how to query time series data from InfluxDB using Flux, and introduces Flux syntax and functions. +This multi-part getting started guide walks through important concepts related to Flux. +It covers querying time series data from InfluxDB using Flux, and introduces Flux syntax and functions. ## Flux design principles Flux is designed to be usable, readable, flexible, composable, testable, contributable, and shareable. @@ -23,7 +26,7 @@ Its syntax is largely inspired by [2018's most popular scripting language](https Javascript, and takes a functional approach to data exploration and processing. The following example illustrates querying data stored from the last five minutes, -filtering by the `cpu` measurement and the `cpu=cpu-usage` tag, windowing the data in 1 minute intervals, +filtering by the `cpu` measurement and the `cpu=cpu-total` tag, windowing the data in 1 minute intervals, and calculating the average of each window: ```js @@ -44,6 +47,7 @@ Flux uses pipe-forward operators (`|>`) extensively to chain operations together After each function or operation, Flux returns a table or collection of tables containing data. The pipe-forward operator pipes those tables into the next function or operation where they are further processed or manipulated. +This makes it easy to chain together functions to build sophisticated queries. ### Tables Flux structures all data in tables. diff --git a/content/v2.0/query-data/get-started/query-influxdb.md b/content/v2.0/query-data/get-started/query-influxdb.md index 2534cbe29..7ab874778 100644 --- a/content/v2.0/query-data/get-started/query-influxdb.md +++ b/content/v2.0/query-data/get-started/query-influxdb.md @@ -7,6 +7,11 @@ menu: name: Query InfluxDB parent: Get started with Flux weight: 201 +related: + - /v2.0/query-data/guides/ + - /v2.0/reference/flux/stdlib/built-in/inputs/from + - /v2.0/reference/flux/stdlib/built-in/transformations/range + - /v2.0/reference/flux/stdlib/built-in/transformations/filter --- This guide walks through the basics of using Flux to query data from InfluxDB. @@ -18,8 +23,8 @@ Every Flux query needs the following: ## 1. Define your data source -Flux's [`from()`](/v2.0/reference/flux/functions/built-in/inputs/from) function defines an InfluxDB data source. -It requires a [`bucket`](/v2.0/reference/flux/functions/built-in/inputs/from#bucket) parameter. +Flux's [`from()`](/v2.0/reference/flux/stdlib/built-in/inputs/from) function defines an InfluxDB data source. +It requires a [`bucket`](/v2.0/reference/flux/stdlib/built-in/inputs/from#bucket) parameter. The following examples use `example-bucket` as the bucket name. ```js @@ -31,9 +36,9 @@ Flux requires a time range when querying time series data. "Unbounded" queries are very resource-intensive and as a protective measure, Flux will not query the database without a specified range. -Use the pipe-forward operator (`|>`) to pipe data from your data source into the [`range()`](/v2.0/reference/flux/functions/built-in/transformations/range) +Use the pipe-forward operator (`|>`) to pipe data from your data source into the [`range()`](/v2.0/reference/flux/stdlib/built-in/transformations/range) function, which specifies a time range for your query. -It accepts two properties: `start` and `stop`. +It accepts two parameters: `start` and `stop`. Ranges can be **relative** using negative [durations](/v2.0/reference/flux/language/lexical-elements#duration-literals) or **absolute** using [timestamps](/v2.0/reference/flux/language/lexical-elements#date-and-time-literals). @@ -101,7 +106,7 @@ from(bucket:"example-bucket") ``` ## 4. Yield your queried data -Use Flux's `yield()` function to output the filtered tables as the result of the query. +Flux's `yield()` function outputs the filtered tables as the result of the query. ```js from(bucket:"example-bucket") @@ -114,16 +119,17 @@ from(bucket:"example-bucket") |> yield() ``` -{{% note %}} -Flux automatically assume a `yield()` function at +Flux automatically assumes a `yield()` function at the end of each script in order to output and visualize the data. -`yield()` is only necessary when including multiple queries in the same Flux query. +Explicitly calling `yield()` is only necessary when including multiple queries in the same Flux query. Each set of returned data needs to be named using the `yield()` function. -{{% /note %}} ## Congratulations! You have now queried data from InfluxDB using Flux. -This is a barebones query that can be transformed in other ways. + +The query shown here is a barebones example. +Flux queries can be extended in many ways to form powerful scripts. + diff --git a/layouts/partials/article.html b/layouts/partials/article.html index 21aed2ab4..5eb869b3c 100644 --- a/layouts/partials/article.html +++ b/layouts/partials/article.html @@ -5,6 +5,7 @@ {{ partial "article/enterprise.html" . }} {{ partial "article/cloud.html" . }} {{ .Content }} + {{ partial "article/related.html" . }} {{ partial "article/tags.html" . }} {{ if in .RelPermalink "/cloud/"}} diff --git a/layouts/partials/article/_alpha-feedback.html b/layouts/partials/article/_alpha-feedback.html index 65171623c..837749cab 100644 --- a/layouts/partials/article/_alpha-feedback.html +++ b/layouts/partials/article/_alpha-feedback.html @@ -9,5 +9,7 @@
diff --git a/layouts/partials/article/_cloud-feedback.html b/layouts/partials/article/_cloud-feedback.html index d8249c0a9..e79eea35a 100644 --- a/layouts/partials/article/_cloud-feedback.html +++ b/layouts/partials/article/_cloud-feedback.html @@ -1,8 +1,18 @@ {{ $cloudName := .Site.Data.products.cloud.name }} +{{ $cloudNameShort := .Site.Data.products.cloud.shortname }}
diff --git a/layouts/partials/article/related.html b/layouts/partials/article/related.html new file mode 100644 index 000000000..7817ad286 --- /dev/null +++ b/layouts/partials/article/related.html @@ -0,0 +1,19 @@ +{{ if .Params.related }} + +{{ end }} diff --git a/layouts/partials/footer/javascript.html b/layouts/partials/footer/javascript.html index f0d0bbee5..c5f1cfdc3 100644 --- a/layouts/partials/footer/javascript.html +++ b/layouts/partials/footer/javascript.html @@ -1,6 +1,7 @@ {{ $versionSelector := resources.Get "js/version-selector.js" }} {{ $contentInteractions := resources.Get "js/content-interactions.js" }} {{ $searchInteractions := resources.Get "js/search-interactions.js" }} -{{ $footerjs := slice $versionSelector $contentInteractions $searchInteractions | resources.Concat "js/footer.bundle.js" }} +{{ $telegrafFilters := resources.Get "js/telegraf-filters.js" }} +{{ $footerjs := slice $versionSelector $contentInteractions $searchInteractions $telegrafFilters | resources.Concat "js/footer.bundle.js" }} diff --git a/layouts/partials/header.html b/layouts/partials/header.html index 56fac8741..ae29bd997 100644 --- a/layouts/partials/header.html +++ b/layouts/partials/header.html @@ -1,4 +1,4 @@ -{{ $currentVersion := (index (findRE "[^/]+.*?" .RelPermalink) 0) }} +{{ $currentVersion := replaceRE "v" "" (index (findRE "[^/]+.*?" .RelPermalink) 0) }} @@ -12,7 +12,7 @@ {{ end }} - + {{ partial "header/canonical.html" . }} {{ partial "header/stylesheets.html" }} diff --git a/layouts/partials/header/google-analytics.html b/layouts/partials/header/google-analytics.html index 72f484c27..200c31af2 100644 --- a/layouts/partials/header/google-analytics.html +++ b/layouts/partials/header/google-analytics.html @@ -7,3 +7,6 @@ gtag('config', 'UA-45024174-12'); + + + diff --git a/layouts/partials/header/stylesheets.html b/layouts/partials/header/stylesheets.html index 4300db76f..fe39ab799 100644 --- a/layouts/partials/header/stylesheets.html +++ b/layouts/partials/header/stylesheets.html @@ -5,6 +5,7 @@ {{ $cssOptionsLight := (dict "targetPath" "light-theme.css" "outputStyle" "compressed" "enableSourceMap" true) }} {{ $cssSidebarOpen := (dict "targetPath" "sidebar-open.css" "outputStyle" "compressed" "enableSourceMap" true) }} {{ $cssSidebarClose := (dict "targetPath" "sidebar-closed.css" "outputStyle" "compressed" "enableSourceMap" true) }} +{{ $cssAPIOverrides := (dict "targetPath" "api.css" "outputStyle" "compressed" "enableSourceMap" true) }} {{ $PostCSSOptions := (dict "use" "autoprefixer" "noMap" false) }} {{ $stylesLight := resources.Get "styles/styles-default.scss" | toCSS $cssOptionsLight | postCSS $PostCSSOptions | fingerprint }} @@ -18,3 +19,6 @@ {{ $stylesSidebarClosed := resources.Get "styles/sidebar-closed.scss" | toCSS $cssOptionsLight | postCSS $PostCSSOptions | fingerprint }} + +{{ $stylesAPIOverrides := resources.Get "styles/styles-api.scss" | toCSS $cssAPIOverrides | postCSS $PostCSSOptions }} + diff --git a/layouts/shortcodes/children.html b/layouts/shortcodes/children.html index f2d948c6f..0ae52a9d0 100644 --- a/layouts/shortcodes/children.html +++ b/layouts/shortcodes/children.html @@ -21,6 +21,17 @@ {{ else }}{{- .Summary | markdownify -}} {{ end -}}

+ {{ if .Params.list_image }} + {{ $img := .Params.list_image }} + {{ if (fileExists ( print "/static" $img )) }} + {{ with (imageConfig ( print "/static" $img )) }} + {{ $imageWidth := div .Width 3 }} + + {{ end }} + {{ else }} + + {{ end }} + {{ end }} {{ end }} {{ else if (eq $type "functions") }} 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/layouts/shortcodes/telegraf/filters.html b/layouts/shortcodes/telegraf/filters.html new file mode 100644 index 000000000..e0c4d705b --- /dev/null +++ b/layouts/shortcodes/telegraf/filters.html @@ -0,0 +1,21 @@ +
+ + {{ range .Site.Data.telegraf_plugin_filters.filters }} + {{ $numValues := len .values }} +
+
{{ .category }}
+
    + {{ range .values }} +
  • + +
  • + {{ end }} +
+
+ {{ end }} + +
diff --git a/layouts/shortcodes/telegraf/plugins.html b/layouts/shortcodes/telegraf/plugins.html new file mode 100644 index 000000000..b68f6e529 --- /dev/null +++ b/layouts/shortcodes/telegraf/plugins.html @@ -0,0 +1,18 @@ +{{ $type := .Get "type" }} +{{ $telegrafVersion := replaceRE `\.[^.]*$` "" .Site.Data.versions.telegraf_version }} + +{{ range (index .Site.Data.telegraf_plugins $type ) }} + {{ $pluginTags := delimit .tags " " }} + {{ $minorVer := replaceRE `\.[^.]*$` "" .introduced }} +
+
+

{{ .name }}

+

+ Plugin ID: {{ $type }}s.{{ .id }}
+ Telegraf {{ if not .deprecated }}{{ .introduced }}+{{ else }}{{ .introduced }} - {{ .deprecated }} Deprecated{{ end }} +

+

{{ .description | markdownify | safeHTML }}

+
+ View +
+{{ end }} diff --git a/static/downloads/air-sensor-data.rb b/static/downloads/air-sensor-data.rb new file mode 100755 index 000000000..70fd9136f --- /dev/null +++ b/static/downloads/air-sensor-data.rb @@ -0,0 +1,131 @@ +#! /usr/bin/ruby +require "optparse" +require "net/http" +require"openssl" +require "uri" + +# CLI Options +options = { + protocol: "http", + host: "localhost", + port: "9999", + interval: 5 +} + +OptionParser.new do |opt| + opt.banner = "Usage: air-sensor-data [OPTIONS]" + + opt.on("-o","--org ORG","The organization to write data to. REQUIRED.") do |org| + options[:org] = org + end + + opt.on("-b","--bucket BUCKET","The bucket to write data to. REQUIRED.") do |bucket| + options[:bucket] = bucket + end + + opt.on("-t","--token TOKEN","Your InfluxDB authentication token. REQUIRED.") do |token| + options[:token] = token + end + + opt.on("-h","--host host","Your InfluxDB host. Defaults to 'localhost'") do |host| + options[:host] = host + end + + opt.on("-p","--port port","Your InfluxDB port. Defaults to '9999'") do |port| + options[:port] = port + end + + opt.on("-i","--interval interval",Integer,"The interval (in seconds) at which to write data. Defaults to '5'.") do |interval| + options[:interval] = interval + end + + opt.on("-s","--tls", "Sends data over HTTPS.") do |tls| + options[:protocol] = "https" + end + + opt.on("--help","Displays this help information.") do + puts opt + exit + end +end.parse! + +unless options[:org] && options[:bucket] && options[:token] + $stderr.puts "\nError: you must specify an organization, bucket, and token.\nUse the '--help' flag for more info.\n\n" + exit 1 +end + +# Global Variables +$protocol = options[:protocol] +$host = options[:host] +$port = options[:port] +$org = options[:org] +$bucket = options[:bucket] +$token = options[:token] +$interval = options[:interval] + +# Seed Data +seeds = [ + {id: 100, t: 71.2, h: 35.1, c: 0.5, t_inc: -0.05..0.05, h_inc: -0.05..0.05, c_inc: -0.02..0.02}, + {id: 101, t: 71.8, h: 34.9, c: 0.5, t_inc: -0.05..0.05, h_inc: -0.05..0.05, c_inc: -0.02..0.02}, + {id: 102, t: 72.0, h: 34.9, c: 0.5, t_inc: -0.05..0.05, h_inc: -0.05..0.05, c_inc: -0.02..0.02}, + {id: 103, t: 71.3, h: 35.2, c: 0.4, t_inc: -0.05..0.05, h_inc: -0.05..0.05, c_inc: -0.02..0.02}, + {id: 200, t: 73.6, h: 35.8, c: 0.5, t_inc: -0.05..0.05, h_inc: -0.05..0.05, c_inc: -0.02..0.05}, + {id: 201, t: 74.0, h: 35.2, c: 0.5, t_inc: -0.05..0.05, h_inc: -0.05..0.05, c_inc: -0.02..0.02}, + {id: 202, t: 75.3, h: 35.7, c: 0.5, t_inc: -0.05..0.05, h_inc: -0.05..0.05, c_inc: -0.02..0.02}, + {id: 203, t: 74.8, h: 35.9, c: 0.4, t_inc: -0.05..0.05, h_inc: -0.05..0.05, c_inc: -0.02..0.02}, +] + +def increment_data(data={}) + data[:t] += rand(data[:t_inc]) + data[:h] += rand(data[:h_inc]) + data[:c] += rand(data[:c_inc]) + + # Avoid negative humidity and co + if data[:h] < 0 + data[:h] = 0 + end + if data[:c] < 0 + data[:c] = 0 + end + + return data +end + +def line_protocol_batch(point_data=[]) + batch = [] + point_data.each do |v| + batch << "airSensors,sensor_id=TLM0#{v[:id]} temperature=#{v[:t]},humidity=#{v[:h]},co=#{v[:c]}" + end + return batch.join("\n") +end + +def send_data(batch) + uri = URI.parse("#{$protocol}://#{$host}:#{$port}/api/v2/write?org=#{URI::encode($org)}&bucket=#{URI::encode($bucket)}") + request = Net::HTTP::Post.new(uri) + request["Authorization"] = "Token #{$token}" + request.body = "#{batch}" + + req_options = { + use_ssl: uri.scheme == "https", + ssl_version: :SSLv23 + } + + response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http| + http.request(request) + end +end + +def send_batches(dataset=[], interval=$interval) + dataset.map! { |seed| increment_data(seed) } + send_data(line_protocol_batch(dataset)) + sleep interval + send_batches(dataset,interval) +end + +begin + puts "Sending data to #{$protocol}://#{$host}:#{$port}..." + puts " (ctrl-c to kill the data stream)" + send_batches(seeds) +rescue Interrupt + puts "\nStopping data stream..." +end diff --git a/static/downloads/air-sensors-dashboard.json b/static/downloads/air-sensors-dashboard.json new file mode 100644 index 000000000..e74b76558 --- /dev/null +++ b/static/downloads/air-sensors-dashboard.json @@ -0,0 +1,1029 @@ +{ + "meta": { + "version": "1", + "type": "dashboard", + "name": "Air Sensors-Template", + "description": "template created from dashboard: Air Sensors" + }, + "content": { + "data": { + "type": "dashboard", + "attributes": { + "name": "Air Sensors", + "description": "" + }, + "relationships": { + "label": { + "data": [] + }, + "cell": { + "data": [ + { + "type": "cell", + "id": "0423614244f70000" + }, + { + "type": "cell", + "id": "042361d158770000" + }, + { + "type": "cell", + "id": "04236a6e6cf70000" + }, + { + "type": "cell", + "id": "042372352a770000" + }, + { + "type": "cell", + "id": "04237241bf770000" + }, + { + "type": "cell", + "id": "042372d4bcf70000" + }, + { + "type": "cell", + "id": "0423737a1ff70000" + }, + { + "type": "cell", + "id": "042373fce5370000" + }, + { + "type": "cell", + "id": "0423753affb70000" + }, + { + "type": "cell", + "id": "04237b90e1370000" + } + ] + }, + "variable": { + "data": [ + { + "type": "variable", + "id": "03bdc0c5a4ff0000" + }, + { + "type": "variable", + "id": "04237161ad770000" + } + ] + } + } + }, + "included": [ + { + "id": "0423614244f70000", + "type": "cell", + "attributes": { + "x": 4, + "y": 1, + "w": 4, + "h": 2 + }, + "relationships": { + "view": { + "data": { + "type": "view", + "id": "0423614244f70000" + } + } + } + }, + { + "id": "042361d158770000", + "type": "cell", + "attributes": { + "x": 8, + "y": 1, + "w": 4, + "h": 2 + }, + "relationships": { + "view": { + "data": { + "type": "view", + "id": "042361d158770000" + } + } + } + }, + { + "id": "04236a6e6cf70000", + "type": "cell", + "attributes": { + "x": 0, + "y": 7, + "w": 12, + "h": 4 + }, + "relationships": { + "view": { + "data": { + "type": "view", + "id": "04236a6e6cf70000" + } + } + } + }, + { + "id": "042372352a770000", + "type": "cell", + "attributes": { + "x": 0, + "y": 4, + "w": 3, + "h": 3 + }, + "relationships": { + "view": { + "data": { + "type": "view", + "id": "042372352a770000" + } + } + } + }, + { + "id": "04237241bf770000", + "type": "cell", + "attributes": { + "x": 0, + "y": 1, + "w": 4, + "h": 2 + }, + "relationships": { + "view": { + "data": { + "type": "view", + "id": "04237241bf770000" + } + } + } + }, + { + "id": "042372d4bcf70000", + "type": "cell", + "attributes": { + "x": 3, + "y": 4, + "w": 3, + "h": 3 + }, + "relationships": { + "view": { + "data": { + "type": "view", + "id": "042372d4bcf70000" + } + } + } + }, + { + "id": "0423737a1ff70000", + "type": "cell", + "attributes": { + "x": 6, + "y": 4, + "w": 3, + "h": 3 + }, + "relationships": { + "view": { + "data": { + "type": "view", + "id": "0423737a1ff70000" + } + } + } + }, + { + "id": "042373fce5370000", + "type": "cell", + "attributes": { + "x": 9, + "y": 4, + "w": 3, + "h": 3 + }, + "relationships": { + "view": { + "data": { + "type": "view", + "id": "042373fce5370000" + } + } + } + }, + { + "id": "0423753affb70000", + "type": "cell", + "attributes": { + "x": 0, + "y": 3, + "w": 12, + "h": 1 + }, + "relationships": { + "view": { + "data": { + "type": "view", + "id": "0423753affb70000" + } + } + } + }, + { + "id": "04237b90e1370000", + "type": "cell", + "attributes": { + "x": 0, + "y": 0, + "w": 12, + "h": 1 + }, + "relationships": { + "view": { + "data": { + "type": "view", + "id": "04237b90e1370000" + } + } + } + }, + { + "type": "view", + "id": "0423614244f70000", + "attributes": { + "name": "Humidity (All Rooms)", + "properties": { + "shape": "chronograf-v2", + "queries": [ + { + "text": "import \"sql\"\n\nsensorInfo = sql.from(\n driverName: \"postgres\",\n dataSourceName: \"postgresql://localhost?sslmode=disable\",\n query: \"SELECT * FROM sensors\"\n)\n\nsensorMetrics = from(bucket: v.bucket)\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"airSensors\")\n\ndata = join(tables: {metric: sensorMetrics, info: sensorInfo}, on: [\"sensor_id\"])\n\ndata\n |> filter(fn: (r) => r._field == \"humidity\")\n |> keep(columns: [\"_time\",\"_value\",\"location\"])\n |> group(columns: [\"location\"])", + "editMode": "advanced", + "name": "", + "builderConfig": { + "buckets": [], + "tags": [ + { + "key": "_measurement", + "values": [] + } + ], + "functions": [], + "aggregateWindow": { + "period": "auto" + } + } + } + ], + "axes": { + "x": { + "bounds": [ + "", + "" + ], + "label": "", + "prefix": "", + "suffix": "", + "base": "10", + "scale": "linear" + }, + "y": { + "bounds": [ + "", + "" + ], + "label": "", + "prefix": "", + "suffix": "%", + "base": "10", + "scale": "linear" + } + }, + "type": "xy", + "legend": {}, + "geom": "monotoneX", + "colors": [ + { + "id": "cb8568fb-29b5-4c17-9399-05dcce537935", + "type": "scale", + "hex": "#FDC44F", + "name": "Cthulhu", + "value": 0 + }, + { + "id": "4f1a924d-009b-45f5-8419-9fa53204bdf7", + "type": "scale", + "hex": "#007C76", + "name": "Cthulhu", + "value": 0 + }, + { + "id": "3f2c8336-6b0d-431a-a3c2-8c5713479225", + "type": "scale", + "hex": "#8983FF", + "name": "Cthulhu", + "value": 0 + } + ], + "note": "", + "showNoteWhenEmpty": false, + "xColumn": "_time", + "yColumn": "_value", + "shadeBelow": false + } + } + }, + { + "type": "view", + "id": "042361d158770000", + "attributes": { + "name": "Carbon Monoxide (All Rooms)", + "properties": { + "shape": "chronograf-v2", + "queries": [ + { + "text": "import \"sql\"\n\nsensorInfo = sql.from(\n driverName: \"postgres\",\n dataSourceName: \"postgresql://localhost?sslmode=disable\",\n query: \"SELECT * FROM sensors\"\n)\n\nsensorMetrics = from(bucket: v.bucket)\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"airSensors\")\n\ndata = join(tables: {metric: sensorMetrics, info: sensorInfo}, on: [\"sensor_id\"])\n\ndata\n |> filter(fn: (r) => r._field == \"co\")\n |> keep(columns: [\"_time\",\"_value\",\"location\"])\n |> group(columns: [\"location\"])", + "editMode": "advanced", + "name": "", + "builderConfig": { + "buckets": [], + "tags": [ + { + "key": "_measurement", + "values": [] + } + ], + "functions": [], + "aggregateWindow": { + "period": "auto" + } + } + } + ], + "axes": { + "x": { + "bounds": [ + "", + "" + ], + "label": "", + "prefix": "", + "suffix": "", + "base": "10", + "scale": "linear" + }, + "y": { + "bounds": [ + "", + "" + ], + "label": "", + "prefix": "", + "suffix": " ppm", + "base": "10", + "scale": "linear" + } + }, + "type": "xy", + "legend": {}, + "geom": "monotoneX", + "colors": [ + { + "id": "d6574d38-e7b7-447b-8ca1-ad3f36296bba", + "type": "scale", + "hex": "#8F8AF4", + "name": "Do Androids Dream of Electric Sheep?", + "value": 0 + }, + { + "id": "67ce5515-4411-4fc0-a5a6-282b4ee76b97", + "type": "scale", + "hex": "#A51414", + "name": "Do Androids Dream of Electric Sheep?", + "value": 0 + }, + { + "id": "5168db82-ac7e-4d57-b8ff-5747fa01762b", + "type": "scale", + "hex": "#F4CF31", + "name": "Do Androids Dream of Electric Sheep?", + "value": 0 + } + ], + "note": "", + "showNoteWhenEmpty": false, + "xColumn": "_time", + "yColumn": "_value", + "shadeBelow": false + } + } + }, + { + "type": "view", + "id": "04236a6e6cf70000", + "attributes": { + "name": "Sensor Info", + "properties": { + "shape": "chronograf-v2", + "type": "table", + "queries": [ + { + "text": "import \"sql\"\n\nsql.from(\n driverName: \"postgres\",\n dataSourceName: \"postgresql://localhost?sslmode=disable\",\n query: \"SELECT * FROM sensors\"\n)\n |> drop(columns: [\"sensor_id\"])\n |> rename(columns: {location: \"Sensor Location\", model_number: \"Sensor Model Number\", last_inspected: \"Last Inspected\"})", + "editMode": "advanced", + "name": "", + "builderConfig": { + "buckets": [], + "tags": [ + { + "key": "_measurement", + "values": [] + } + ], + "functions": [], + "aggregateWindow": { + "period": "auto" + } + } + } + ], + "colors": [ + { + "id": "base", + "type": "text", + "hex": "#00C9FF", + "name": "laser", + "value": 0 + } + ], + "tableOptions": { + "verticalTimeAxis": true, + "sortBy": { + "internalName": "", + "displayName": "", + "visible": false + }, + "wrapping": "", + "fixFirstColumn": false + }, + "fieldOptions": [ + { + "internalName": "", + "displayName": "", + "visible": true + }, + { + "internalName": "result", + "displayName": "result", + "visible": true + }, + { + "internalName": "table", + "displayName": "table", + "visible": true + }, + { + "internalName": "Sensor Location", + "displayName": "Sensor Location", + "visible": true + }, + { + "internalName": "Sensor Model Number", + "displayName": "Sensor Model Number", + "visible": true + }, + { + "internalName": "Last Inspected", + "displayName": "Last Inspected", + "visible": true + } + ], + "timeFormat": "YYYY-MM-DD HH:mm:ss", + "decimalPlaces": { + "isEnforced": false, + "digits": 2 + }, + "note": "", + "showNoteWhenEmpty": false + } + } + }, + { + "type": "view", + "id": "042372352a770000", + "attributes": { + "name": "Temperature", + "properties": { + "shape": "chronograf-v2", + "queries": [ + { + "text": "import \"sql\"\n\nsensorInfo = sql.from(\n driverName: \"postgres\",\n dataSourceName: \"postgresql://localhost?sslmode=disable\",\n query: \"SELECT * FROM sensors\"\n)\n\nsensorMetrics = from(bucket: v.bucket)\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"airSensors\")\n\ndata = join(tables: {metric: sensorMetrics, info: sensorInfo}, on: [\"sensor_id\"])\n\ndata\n |> filter(fn: (r) => r._field == \"temperature\" and r.location == v.room)", + "editMode": "advanced", + "name": "", + "builderConfig": { + "buckets": [], + "tags": [ + { + "key": "_measurement", + "values": [] + } + ], + "functions": [], + "aggregateWindow": { + "period": "auto" + } + } + } + ], + "axes": { + "x": { + "bounds": [ + "", + "" + ], + "label": "", + "prefix": "", + "suffix": "", + "base": "10", + "scale": "linear" + }, + "y": { + "bounds": [ + "65", + "85" + ], + "label": "", + "prefix": "", + "suffix": "°F", + "base": "10", + "scale": "linear" + } + }, + "type": "line-plus-single-stat", + "legend": {}, + "colors": [ + { + "id": "base", + "type": "text", + "hex": "#00C9FF", + "name": "laser", + "value": 0 + }, + { + "id": "22088d41-bea2-47bc-a697-ab8093e3d447", + "type": "scale", + "hex": "#FDC44F", + "name": "Cthulhu", + "value": 0 + }, + { + "id": "9edb23f5-6e0c-4365-80e3-320736c7334c", + "type": "scale", + "hex": "#007C76", + "name": "Cthulhu", + "value": 0 + }, + { + "id": "2c39bd4c-4954-4991-8c03-89e9186e4271", + "type": "scale", + "hex": "#8983FF", + "name": "Cthulhu", + "value": 0 + } + ], + "prefix": "", + "suffix": "°F", + "decimalPlaces": { + "isEnforced": true, + "digits": 1 + }, + "note": "", + "showNoteWhenEmpty": false, + "xColumn": "_time", + "yColumn": "_value", + "shadeBelow": false + } + } + }, + { + "type": "view", + "id": "04237241bf770000", + "attributes": { + "name": "Temperature (All Rooms)", + "properties": { + "shape": "chronograf-v2", + "queries": [ + { + "text": "import \"sql\"\n\nsensorInfo = sql.from(\n driverName: \"postgres\",\n dataSourceName: \"postgresql://localhost?sslmode=disable\",\n query: \"SELECT * FROM sensors\"\n)\n\nsensorMetrics = from(bucket: v.bucket)\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"airSensors\")\n\ndata = join(tables: {metric: sensorMetrics, info: sensorInfo}, on: [\"sensor_id\"])\n\ndata\n |> filter(fn: (r) => r._field == \"temperature\")\n |> keep(columns: [\"_time\",\"_value\",\"location\"])\n |> group(columns: [\"location\"])", + "editMode": "advanced", + "name": "", + "builderConfig": { + "buckets": [], + "tags": [ + { + "key": "_measurement", + "values": [] + } + ], + "functions": [], + "aggregateWindow": { + "period": "auto" + } + } + } + ], + "axes": { + "x": { + "bounds": [ + "", + "" + ], + "label": "", + "prefix": "", + "suffix": "", + "base": "10", + "scale": "linear" + }, + "y": { + "bounds": [ + "", + "" + ], + "label": "", + "prefix": "", + "suffix": "°F", + "base": "10", + "scale": "linear" + } + }, + "type": "xy", + "legend": {}, + "geom": "monotoneX", + "colors": [ + { + "id": "9ae217cd-ae69-42b2-b5b9-229a450d854c", + "type": "scale", + "hex": "#31C0F6", + "name": "Nineteen Eighty Four", + "value": 0 + }, + { + "id": "03684e9b-7ad4-478a-afcc-11c46ff136cb", + "type": "scale", + "hex": "#A500A5", + "name": "Nineteen Eighty Four", + "value": 0 + }, + { + "id": "4e437663-7938-4429-b772-913cb82c8b08", + "type": "scale", + "hex": "#FF7E27", + "name": "Nineteen Eighty Four", + "value": 0 + } + ], + "note": "", + "showNoteWhenEmpty": false, + "xColumn": "_time", + "yColumn": "_value", + "shadeBelow": false + } + } + }, + { + "type": "view", + "id": "042372d4bcf70000", + "attributes": { + "name": "Humidity", + "properties": { + "shape": "chronograf-v2", + "queries": [ + { + "text": "import \"sql\"\n\nsensorInfo = sql.from(\n driverName: \"postgres\",\n dataSourceName: \"postgresql://localhost?sslmode=disable\",\n query: \"SELECT * FROM sensors\"\n)\n\nsensorMetrics = from(bucket: v.bucket)\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"airSensors\")\n\ndata = join(tables: {metric: sensorMetrics, info: sensorInfo}, on: [\"sensor_id\"])\n\ndata\n |> filter(fn: (r) => r._field == \"humidity\" and r.location == v.room)", + "editMode": "advanced", + "name": "", + "builderConfig": { + "buckets": [], + "tags": [ + { + "key": "_measurement", + "values": [] + } + ], + "functions": [], + "aggregateWindow": { + "period": "auto" + } + } + } + ], + "axes": { + "x": { + "bounds": [ + "", + "" + ], + "label": "", + "prefix": "", + "suffix": "", + "base": "10", + "scale": "linear" + }, + "y": { + "bounds": [ + "25", + "55" + ], + "label": "", + "prefix": "", + "suffix": "%", + "base": "10", + "scale": "linear" + } + }, + "type": "line-plus-single-stat", + "legend": {}, + "colors": [ + { + "id": "base", + "type": "text", + "hex": "#00C9FF", + "name": "laser", + "value": 0 + }, + { + "id": "99f3c23b-c495-451e-8b30-162ba1739972", + "type": "scale", + "hex": "#8F8AF4", + "name": "Do Androids Dream of Electric Sheep?", + "value": 0 + }, + { + "id": "2b27ca35-0a93-4506-99ce-b6c338c4f0e1", + "type": "scale", + "hex": "#A51414", + "name": "Do Androids Dream of Electric Sheep?", + "value": 0 + }, + { + "id": "44866d00-0182-4136-b8a2-ea991e1300af", + "type": "scale", + "hex": "#F4CF31", + "name": "Do Androids Dream of Electric Sheep?", + "value": 0 + } + ], + "prefix": "", + "suffix": "%", + "decimalPlaces": { + "isEnforced": true, + "digits": 2 + }, + "note": "", + "showNoteWhenEmpty": false, + "xColumn": "_time", + "yColumn": "_value", + "shadeBelow": false + } + } + }, + { + "type": "view", + "id": "0423737a1ff70000", + "attributes": { + "name": "Carbon Monoxide", + "properties": { + "shape": "chronograf-v2", + "queries": [ + { + "text": "import \"sql\"\n\nsensorInfo = sql.from(\n driverName: \"postgres\",\n dataSourceName: \"postgresql://localhost?sslmode=disable\",\n query: \"SELECT * FROM sensors\"\n)\n\nsensorMetrics = from(bucket: v.bucket)\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"airSensors\")\n\ndata = join(tables: {metric: sensorMetrics, info: sensorInfo}, on: [\"sensor_id\"])\n\ndata\n |> filter(fn: (r) => r._field == \"co\" and r.location == v.room)", + "editMode": "advanced", + "name": "", + "builderConfig": { + "buckets": [], + "tags": [ + { + "key": "_measurement", + "values": [] + } + ], + "functions": [], + "aggregateWindow": { + "period": "auto" + } + } + } + ], + "axes": { + "x": { + "bounds": [ + "", + "" + ], + "label": "", + "prefix": "", + "suffix": "", + "base": "10", + "scale": "linear" + }, + "y": { + "bounds": [ + "", + "" + ], + "label": "", + "prefix": "", + "suffix": " ppm", + "base": "10", + "scale": "linear" + } + }, + "type": "line-plus-single-stat", + "legend": {}, + "colors": [ + { + "id": "base", + "type": "text", + "hex": "#00C9FF", + "name": "laser", + "value": 0 + }, + { + "id": "6618c85e-1b5f-4c4f-9a03-c852a1a3cc47", + "type": "scale", + "hex": "#DA6FF1", + "name": "Ectoplasm", + "value": 0 + }, + { + "id": "ea594da3-a224-4f9d-b592-3623b9e84b0f", + "type": "scale", + "hex": "#00717A", + "name": "Ectoplasm", + "value": 0 + }, + { + "id": "0add3620-1c62-4798-89ab-7435f19caec6", + "type": "scale", + "hex": "#ACFF76", + "name": "Ectoplasm", + "value": 0 + } + ], + "prefix": "", + "suffix": " ppm", + "decimalPlaces": { + "isEnforced": true, + "digits": 1 + }, + "note": "", + "showNoteWhenEmpty": false, + "xColumn": "_time", + "yColumn": "_value", + "shadeBelow": false + } + } + }, + { + "type": "view", + "id": "042373fce5370000", + "attributes": { + "name": "Carbon Monoxide Level", + "properties": { + "shape": "chronograf-v2", + "type": "gauge", + "queries": [ + { + "text": "import \"sql\"\n\nsensorInfo = sql.from(\n driverName: \"postgres\",\n dataSourceName: \"postgresql://localhost?sslmode=disable\",\n query: \"SELECT * FROM sensors\"\n)\n\nsensorMetrics = from(bucket: v.bucket)\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"airSensors\")\n\ndata = join(tables: {metric: sensorMetrics, info: sensorInfo}, on: [\"sensor_id\"])\n\ndata\n |> filter(fn: (r) => r._field == \"co\" and r.location == v.room)", + "editMode": "advanced", + "name": "", + "builderConfig": { + "buckets": [], + "tags": [ + { + "key": "_measurement", + "values": [] + } + ], + "functions": [], + "aggregateWindow": { + "period": "auto" + } + } + } + ], + "prefix": "", + "suffix": " ppm", + "colors": [ + { + "id": "0", + "type": "min", + "hex": "#4ED8A0", + "name": "rainforest", + "value": 0 + }, + { + "id": "eba43308-b8ae-40fd-bc0a-d056f4ceb435", + "type": "threshold", + "hex": "#FFB94A", + "name": "pineapple", + "value": 30 + }, + { + "id": "5a51cc65-ec3d-45a4-b5c9-94156cdf279b", + "type": "threshold", + "hex": "#BF3D5E", + "name": "ruby", + "value": 70 + }, + { + "id": "1", + "type": "max", + "hex": "#BF3D5E", + "name": "ruby", + "value": 140 + } + ], + "decimalPlaces": { + "isEnforced": true, + "digits": 2 + }, + "note": "", + "showNoteWhenEmpty": false + } + } + }, + { + "type": "view", + "id": "0423753affb70000", + "attributes": { + "name": "Name this Cell", + "properties": { + "shape": "chronograf-v2", + "type": "markdown", + "note": " \n**`⬆` View metrics for a specific room by selecting the a room above.**" + } + } + }, + { + "type": "view", + "id": "04237b90e1370000", + "attributes": { + "name": "Name this Cell", + "properties": { + "shape": "chronograf-v2", + "type": "markdown", + "note": " \n**`⬆` Select the bucket that contains the airSensor measurement.**" + } + } + }, + { + "id": "03bdc0c5a4ff0000", + "type": "variable", + "attributes": { + "name": "bucket", + "arguments": { + "type": "query", + "values": { + "query": "buckets()\n |> map(fn: (r) => ({ _value: r.name }))\n", + "language": "flux" + } + }, + "selected": null + }, + "relationships": { + "label": { + "data": [] + } + } + }, + { + "id": "04237161ad770000", + "type": "variable", + "attributes": { + "name": "room", + "arguments": { + "type": "query", + "values": { + "query": "import \"sql\"\n\nsql.from(\n driverName: \"postgres\",\n dataSourceName: \"postgresql://localhost?sslmode=disable\",\n query: \"SELECT * FROM sensors\"\n)\n |> rename(columns: {location: \"_value\"})\n |> keep(columns: [\"_value\"])\n", + "language": "flux" + } + }, + "selected": null + }, + "relationships": { + "label": { + "data": [] + } + } + } + ] + }, + "labels": [] +} diff --git a/static/downloads/sample-sensor-info.csv b/static/downloads/sample-sensor-info.csv new file mode 100644 index 000000000..07ce7c2f3 --- /dev/null +++ b/static/downloads/sample-sensor-info.csv @@ -0,0 +1,9 @@ +sensor_id,location,model_number,last_inspected +TLM0100,Main Lobby,TLM89092A,1/11/2019 +TLM0101,Room 101,TLM89092A,1/11/2019 +TLM0102,Room 102,TLM89092B,1/11/2019 +TLM0103,Mechanical Room,TLM90012Z,1/14/2019 +TLM0200,Conference Room,TLM89092B,9/24/2018 +TLM0201,Room 201,TLM89092B,9/24/2018 +TLM0202,Room 202,TLM89092A,9/24/2018 +TLM0203,Room 203,TLM89092A,9/24/2018 diff --git a/static/fonts/KlavikaBoldBoldItalic.otf b/static/fonts/KlavikaBoldBoldItalic.otf deleted file mode 100644 index 95bdd9767..000000000 Binary files a/static/fonts/KlavikaBoldBoldItalic.otf and /dev/null differ diff --git a/static/fonts/KlavikaLight-ItalicTF.otf b/static/fonts/KlavikaLight-ItalicTF.otf deleted file mode 100644 index 5fdbc356e..000000000 Binary files a/static/fonts/KlavikaLight-ItalicTF.otf and /dev/null differ diff --git a/static/fonts/icomoon.eot b/static/fonts/icomoon.eot index 2ab4b73c5..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 eac808057..df72e9985 100755 --- a/static/fonts/icomoon.svg +++ b/static/fonts/icomoon.svg @@ -66,11 +66,17 @@ + + + + + + diff --git a/static/fonts/icomoon.ttf b/static/fonts/icomoon.ttf index 5a3463849..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 4336de211..a232e31cc 100755 Binary files a/static/fonts/icomoon.woff and b/static/fonts/icomoon.woff differ diff --git a/static/img/2-0-cloud-usage.png b/static/img/2-0-cloud-usage.png index 58fcc0eb6..50799b610 100644 Binary files a/static/img/2-0-cloud-usage.png and b/static/img/2-0-cloud-usage.png differ diff --git a/static/img/2-0-dashboard-clone.png b/static/img/2-0-dashboard-clone.png deleted file mode 100644 index eb14ceb82..000000000 Binary files a/static/img/2-0-dashboard-clone.png and /dev/null differ diff --git a/static/img/2-0-dashboard-delete.png b/static/img/2-0-dashboard-delete.png deleted file mode 100644 index aa19cd67d..000000000 Binary files a/static/img/2-0-dashboard-delete.png and /dev/null 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-sql-dashboard-variable.png b/static/img/2-0-sql-dashboard-variable.png new file mode 100644 index 000000000..4b8238f04 Binary files /dev/null and b/static/img/2-0-sql-dashboard-variable.png differ diff --git a/static/img/2-0-tasks-create-edit.png b/static/img/2-0-tasks-create-edit.png deleted file mode 100644 index 1215826fd..000000000 Binary files a/static/img/2-0-tasks-create-edit.png and /dev/null 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 diff --git a/static/img/2-0-visualization-dropdown.png b/static/img/2-0-visualization-dropdown.png index 8cf5bea0b..848bb9d94 100644 Binary files a/static/img/2-0-visualization-dropdown.png and b/static/img/2-0-visualization-dropdown.png differ diff --git a/static/img/2-0-visualizations-graph-single-stat-mem.png b/static/img/2-0-visualizations-graph-single-stat-mem.png new file mode 100644 index 000000000..95368261a Binary files /dev/null and b/static/img/2-0-visualizations-graph-single-stat-mem.png differ diff --git a/static/img/2-0-visualizations-guage-pressure.png b/static/img/2-0-visualizations-guage-pressure.png new file mode 100644 index 000000000..e16da7cf8 Binary files /dev/null and b/static/img/2-0-visualizations-guage-pressure.png differ diff --git a/static/img/2-0-visualizations-heatmap-correlation.png b/static/img/2-0-visualizations-heatmap-correlation.png new file mode 100644 index 000000000..ae4f0ea3d Binary files /dev/null and b/static/img/2-0-visualizations-heatmap-correlation.png differ diff --git a/static/img/2-0-visualizations-heatmap-example.png b/static/img/2-0-visualizations-heatmap-example.png new file mode 100644 index 000000000..9fb3bc33b Binary files /dev/null and b/static/img/2-0-visualizations-heatmap-example.png differ diff --git a/static/img/2-0-visualizations-heatmap-vs-scatter.png b/static/img/2-0-visualizations-heatmap-vs-scatter.png new file mode 100644 index 000000000..fae4574c4 Binary files /dev/null and b/static/img/2-0-visualizations-heatmap-vs-scatter.png differ diff --git a/static/img/2-0-visualizations-histogram-errors.png b/static/img/2-0-visualizations-histogram-errors.png new file mode 100644 index 000000000..7a3f3967d Binary files /dev/null and b/static/img/2-0-visualizations-histogram-errors.png differ diff --git a/static/img/2-0-visualizations-line-graph-example.png b/static/img/2-0-visualizations-line-graph-example.png index 58f8ac2bc..58b7667af 100644 Binary files a/static/img/2-0-visualizations-line-graph-example.png and b/static/img/2-0-visualizations-line-graph-example.png differ diff --git a/static/img/2-0-visualizations-line-graph-single-stat-example.png b/static/img/2-0-visualizations-line-graph-single-stat-example.png index fb10a574e..152eb3e7f 100644 Binary files a/static/img/2-0-visualizations-line-graph-single-stat-example.png and b/static/img/2-0-visualizations-line-graph-single-stat-example.png differ diff --git a/static/img/2-0-visualizations-line-graph-smooth-example.png b/static/img/2-0-visualizations-line-graph-smooth-example.png new file mode 100644 index 000000000..9aa61a312 Binary files /dev/null and b/static/img/2-0-visualizations-line-graph-smooth-example.png differ diff --git a/static/img/2-0-visualizations-line-graph-step-example.png b/static/img/2-0-visualizations-line-graph-step-example.png new file mode 100644 index 000000000..5526ae863 Binary files /dev/null and b/static/img/2-0-visualizations-line-graph-step-example.png differ diff --git a/static/img/2-0-visualizations-scatter-correlation.png b/static/img/2-0-visualizations-scatter-correlation.png new file mode 100644 index 000000000..62704baff Binary files /dev/null and b/static/img/2-0-visualizations-scatter-correlation.png differ diff --git a/static/img/2-0-visualizations-scatter-example.png b/static/img/2-0-visualizations-scatter-example.png new file mode 100644 index 000000000..35a3c9175 Binary files /dev/null and b/static/img/2-0-visualizations-scatter-example.png differ diff --git a/static/img/2-0-visualizations-single-stat-example.png b/static/img/2-0-visualizations-single-stat-example.png new file mode 100644 index 000000000..96935e5a3 Binary files /dev/null and b/static/img/2-0-visualizations-single-stat-example.png differ diff --git a/static/img/2-0-visualizations-single-stat-memor.png b/static/img/2-0-visualizations-single-stat-memor.png new file mode 100644 index 000000000..3351a4892 Binary files /dev/null and b/static/img/2-0-visualizations-single-stat-memor.png differ diff --git a/static/img/2-0-visualizations-step-plot-graph-example.png b/static/img/2-0-visualizations-step-plot-graph-example.png deleted file mode 100644 index 67a633afd..000000000 Binary files a/static/img/2-0-visualizations-step-plot-graph-example.png and /dev/null differ diff --git a/static/img/2-0-visualizations-table-human-readable.png b/static/img/2-0-visualizations-table-human-readable.png new file mode 100644 index 000000000..0ada221e7 Binary files /dev/null and b/static/img/2-0-visualizations-table-human-readable.png differ diff --git a/static/img/favicon.png b/static/img/favicon.png index 3cd1da863..2c2ea940f 100644 Binary files a/static/img/favicon.png and b/static/img/favicon.png differ diff --git a/static/img/influx-logo-cubo-dark.png b/static/img/influx-logo-cubo-dark.png new file mode 100644 index 000000000..00f4f2b5f Binary files /dev/null and b/static/img/influx-logo-cubo-dark.png differ diff --git a/static/img/refresh-interval.png b/static/img/refresh-interval.png new file mode 100644 index 000000000..2c756c5df Binary files /dev/null and b/static/img/refresh-interval.png differ diff --git a/static/img/time-range.png b/static/img/time-range.png new file mode 100644 index 000000000..424eb385b Binary files /dev/null and b/static/img/time-range.png differ diff --git a/static/img/timezone.png b/static/img/timezone.png new file mode 100644 index 000000000..8cfe13417 Binary files /dev/null and b/static/img/timezone.png differ diff --git a/static/img/view-raw-data.png b/static/img/view-raw-data.png new file mode 100644 index 000000000..cce55f974 Binary files /dev/null and b/static/img/view-raw-data.png differ