{ "swagger": "2.0", "info": { "title": "Chronograf", "description": "API endpoints for Chronograf", "version": "1.2.0" }, "schemes": [ "http" ], "basePath": "/chronograf/v1", "consumes": [ "application/json" ], "produces": [ "application/json" ], "paths": { "/": { "get": { "tags": [ "routes" ], "summary": "Lists all the endpoints", "description": "List of the endpoints.", "responses": { "200": { "description": "Returns the links to the top level endpoints.", "schema": { "$ref": "#/definitions/Routes" } }, "default": { "description": "Unexpected internal service error", "schema": { "$ref": "#/definitions/Error" } } } } }, "/sources": { "get": { "tags": [ "sources" ], "summary": "Configured data sources", "description": "These data sources store time series data.", "responses": { "200": { "description": "An array of data sources", "schema": { "$ref": "#/definitions/Sources" } }, "default": { "description": "Unexpected internal service error", "schema": { "$ref": "#/definitions/Error" } } } }, "post": { "tags": [ "sources" ], "summary": "Create new data source", "parameters": [ { "name": "source", "in": "body", "description": "Configuration options for data source", "schema": { "$ref": "#/definitions/Source" } } ], "responses": { "201": { "description": "Successfully create data source", "headers": { "Location": { "type": "string", "format": "url", "description": "Location of the newly created data source resource." } }, "schema": { "$ref": "#/definitions/Source" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } } }, "/sources/{id}": { "get": { "tags": [ "sources" ], "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the data source", "required": true } ], "summary": "Configured data sources", "description": "These data sources store time series data.", "responses": { "200": { "description": "Data source used to supply time series information.", "schema": { "$ref": "#/definitions/Source" } }, "404": { "description": "Unknown source id", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "Unexpected internal service error", "schema": { "$ref": "#/definitions/Error" } } } }, "patch": { "tags": [ "sources" ], "summary": "Update data source configuration", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of a data source", "required": true }, { "name": "config", "in": "body", "description": "data source configuration", "schema": { "$ref": "#/definitions/Source" }, "required": true } ], "responses": { "200": { "description": "Data source's configuration was changed", "schema": { "$ref": "#/definitions/Source" } }, "404": { "description": "Happens when trying to access a non-existent data source.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } }, "delete": { "tags": [ "sources" ], "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the source", "required": true } ], "summary": "This specific data source will be removed from the data store. All associated kapacitor resources and kapacitor rules resources are also removed.", "responses": { "204": { "description": "data source has been removed" }, "404": { "description": "Unknown data source id", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "Unexpected internal service error", "schema": { "$ref": "#/definitions/Error" } } } } }, "/sources/{id}/proxy": { "post": { "tags": [ "sources", "proxy" ], "description": "Query the backend time series data source and return the response according to `format`", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the data source", "required": true }, { "name": "query", "in": "body", "description": "Query Parameters", "schema": { "$ref": "#/definitions/Proxy" }, "required": true } ], "responses": { "200": { "description": "Result of the query from the backend time series data source.", "schema": { "$ref": "#/definitions/ProxyResponse" } }, "400": { "description": "Any query that results in a data source error (syntax error, etc) will cause this response. The error message will be passed back in the body", "schema": { "$ref": "#/definitions/Error" } }, "404": { "description": "Data source id does not exist.", "schema": { "$ref": "#/definitions/Error" } }, "408": { "description": "Timeout trying to query data source.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "Unexpected internal service error", "schema": { "$ref": "#/definitions/Error" } } } } }, "/sources/{id}/permissions": { "get": { "tags": [ "sources", "users" ], "summary": "Retrieve possible permissions for this data source", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the data source", "required": true } ], "responses": { "200": { "description": "Listing of all possible permissions", "schema": { "$ref": "#/definitions/AllPermissions" } }, "404": { "description": "Data source id does not exist.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } } }, "/sources/{id}/users": { "get": { "tags": [ "sources", "users" ], "summary": "Retrieve all data sources users", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the data source", "required": true } ], "responses": { "200": { "description": "Listing of all users", "schema": { "$ref": "#/definitions/Users" } }, "404": { "description": "Data source id does not exist.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } }, "post": { "tags": [ "sources", "users" ], "summary": "Create new user for this data source", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the data source", "required": true }, { "name": "user", "in": "body", "description": "Configuration options for new user", "schema": { "$ref": "#/definitions/User" } } ], "responses": { "201": { "description": "Successfully created new user", "headers": { "Location": { "type": "string", "format": "url", "description": "Location of the newly created user resource." } }, "schema": { "$ref": "#/definitions/User" } }, "404": { "description": "Data source id does not exist.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } } }, "/sources/{id}/users/{user_id}": { "get": { "tags": [ "sources", "users" ], "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the data source", "required": true }, { "name": "user_id", "in": "path", "type": "string", "description": "ID of the specific user", "required": true } ], "summary": "Returns information about a specific user", "description": "Specific User within a data source", "responses": { "200": { "description": "Information relating to the user", "schema": { "$ref": "#/definitions/User" } }, "404": { "description": "Unknown user or unknown source", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "Unexpected internal service error", "schema": { "$ref": "#/definitions/Error" } } } }, "patch": { "tags": [ "sources", "users" ], "summary": "Update user configuration", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the data source", "required": true }, { "name": "user_id", "in": "path", "type": "string", "description": "ID of the specific user", "required": true }, { "name": "config", "in": "body", "description": "user configuration", "schema": { "$ref": "#/definitions/User" }, "required": true } ], "responses": { "200": { "description": "Users's configuration was changed", "schema": { "$ref": "#/definitions/User" } }, "404": { "description": "Happens when trying to access a non-existent user or source.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } }, "delete": { "tags": [ "sources", "users" ], "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the data source", "required": true }, { "name": "user_id", "in": "path", "type": "string", "description": "ID of the specific user", "required": true } ], "summary": "This specific user will be removed from the data source", "responses": { "204": { "description": "User has been removed" }, "404": { "description": "Unknown user id or data source", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "Unexpected internal service error", "schema": { "$ref": "#/definitions/Error" } } } } }, "/sources/{id}/roles": { "get": { "tags": [ "sources", "users", "roles" ], "summary": "Retrieve all data sources roles. Available only in Influx Enterprise", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the data source", "required": true } ], "responses": { "200": { "description": "Listing of all roles", "schema": { "$ref": "#/definitions/Roles" } }, "404": { "description": "Data source id does not exist.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } }, "post": { "tags": [ "sources", "users", "roles" ], "summary": "Create new role for this data source", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the data source", "required": true }, { "name": "roleuser", "in": "body", "description": "Configuration options for new role", "schema": { "$ref": "#/definitions/Role" } } ], "responses": { "201": { "description": "Successfully created new role", "headers": { "Location": { "type": "string", "format": "url", "description": "Location of the newly created role resource." } }, "schema": { "$ref": "#/definitions/Role" } }, "404": { "description": "Data source id does not exist.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } } }, "/sources/{id}/roles/{role_id}": { "get": { "tags": [ "sources", "users", "roles" ], "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the data source", "required": true }, { "name": "role_id", "in": "path", "type": "string", "description": "ID of the specific role", "required": true } ], "summary": "Returns information about a specific role", "description": "Specific role within a data source", "responses": { "200": { "description": "Information relating to the role", "schema": { "$ref": "#/definitions/Role" } }, "404": { "description": "Unknown role or unknown source", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "Unexpected internal service error", "schema": { "$ref": "#/definitions/Error" } } } }, "patch": { "tags": [ "sources", "users", "roles" ], "summary": "Update role configuration", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the data source", "required": true }, { "name": "role_id", "in": "path", "type": "string", "description": "ID of the specific role", "required": true }, { "name": "config", "in": "body", "description": "role configuration", "schema": { "$ref": "#/definitions/Role" }, "required": true } ], "responses": { "200": { "description": "Roles's configuration was changed", "schema": { "$ref": "#/definitions/Role" } }, "404": { "description": "Happens when trying to access a non-existent role or source.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } }, "delete": { "tags": [ "sources", "users", "roles" ], "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the data source", "required": true }, { "name": "role_id", "in": "path", "type": "string", "description": "ID of the specific role", "required": true } ], "summary": "This specific role will be removed from the data source", "responses": { "204": { "description": "Role has been removed" }, "404": { "description": "Unknown role id or data source", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "Unexpected internal service error", "schema": { "$ref": "#/definitions/Error" } } } } }, "/sources/{id}/dbs/": { "get": { "tags": [ "databases" ], "summary": "Retrieve all databases for a source", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the data source", "required": true } ], "responses": { "200": { "description": "Listing of all databases for a source", "schema": { "$ref": "#/definitions/Databases" } }, "404": { "description": "Data source id does not exist.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } }, "post": { "tags": [ "databases" ], "summary": "Create new database for a source", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the data source", "required": true }, { "name": "database", "in": "body", "description": "Configuration options for a database", "schema": { "$ref": "#/definitions/Database" }, "required": true } ], "responses": { "201": { "description": "Database successfully created.", "schema": { "$ref": "#/definitions/Database" } }, "404": { "description": "Data source id does not exist.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } } }, "/sources/{id}/dbs/{db_id}": { "delete": { "tags": [ "databases" ], "summary": "Delete database for a source", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the data source", "required": true }, { "name": "db_id", "in": "path", "type": "string", "description": "ID of the database", "required": true } ], "responses": { "204": { "description": "Database has been deleted", }, "404": { "description": "Data source id does not exist.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } } }, "/sources/{id}/dbs/{db_id}/rps": { "get": { "tags": [ "retention policies" ], "summary": "Retrieve all retention policies for a database", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the data source", "required": true }, { "name": "db_id", "in": "path", "type": "string", "description": "ID of the database", "required": true } ], "responses": { "200": { "description": "Listing of all retention policies for a database", "schema": { "$ref": "#/definitions/RetentionPolicies" } }, "404": { "description": "Specified retention policy does not exist.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } }, "post": { "tags": [ "retention policies" ], "summary": "Create new retention policy for a database", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the data source", "required": true }, { "name": "db_id", "in": "path", "type": "string", "description": "ID of the database", "required": true }, { "name": "rp", "in": "body", "description": "Configuration options for the retention policy", "schema": { "$ref": "#/definitions/RetentionPolicy" }, "required": true } ], "responses": { "201": { "description": "Retention Policy successfully created.", "schema": { "$ref": "#/definitions/RetentionPolicy" } }, "404": { "description": "Data source id does not exist.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } } }, "/sources/{id}/dbs/{db_id}/rps/{rp_id}": { "patch": { "tags": [ "retention policies" ], "summary": "Alter retention policy for a database", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the data source", "required": true }, { "name": "db_id", "in": "path", "type": "string", "description": "ID of the database", "required": true }, { "name": "rp_id", "in": "path", "type": "string", "description": "ID of the retention policy", "required": true }, { "name": "rp", "in": "body", "description": "Configuration options for the retention policy", "schema": { "$ref": "#/definitions/RetentionPolicy" }, "required": true } ], "responses": { "200": { "description": "Retention Policy was altered", "schema": { "$ref": "#/definitions/RetentionPolicy" } }, "404": { "description": "Database or source does not exist.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } }, "delete": { "tags": [ "retention policies" ], "summary": "Delete retention policy for a database", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the data source", "required": true }, { "name": "db_id", "in": "path", "type": "string", "description": "ID of the database", "required": true }, { "name": "rp_id", "in": "path", "type": "string", "description": "ID of the retention policy", "required": true } ], "responses": { "204": { "description": "Retention Policy has been deleted", }, "404": { "description": "Data source id does not exist.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } } }, "/sources/{id}/kapacitors": { "get": { "tags": [ "sources", "kapacitors" ], "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the source", "required": true } ], "summary": "Configured kapacitors", "responses": { "200": { "description": "An array of kapacitors", "schema": { "$ref": "#/definitions/Kapacitors" } }, "default": { "description": "Unexpected internal service error", "schema": { "$ref": "#/definitions/Error" } } } }, "post": { "tags": [ "sources", "kapacitors" ], "summary": "Create new kapacitor backend", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the source", "required": true }, { "name": "kapacitor", "in": "body", "description": "Configuration options for kapacitor", "schema": { "$ref": "#/definitions/Kapacitor" } } ], "responses": { "201": { "description": "Successfully created kapacitor source", "headers": { "Location": { "type": "string", "format": "url", "description": "Location of the newly created kapacitor resource." } }, "schema": { "$ref": "#/definitions/Kapacitor" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } } }, "/sources/{id}/kapacitors/{kapa_id}": { "get": { "tags": [ "sources", "kapacitors" ], "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the source", "required": true }, { "name": "kapa_id", "in": "path", "type": "string", "description": "ID of the kapacitor", "required": true } ], "summary": "Configured kapacitors", "description": "These kapacitors are used for monitoring and alerting.", "responses": { "200": { "description": "Kapacitor connection information", "schema": { "$ref": "#/definitions/Kapacitor" } }, "404": { "description": "Unknown data source or kapacitor id", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "Unexpected internal service error", "schema": { "$ref": "#/definitions/Error" } } } }, "patch": { "tags": [ "sources", "kapacitors" ], "summary": "Update kapacitor configuration", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the source", "required": true }, { "name": "kapa_id", "in": "path", "type": "string", "description": "ID of a kapacitor backend", "required": true }, { "name": "config", "in": "body", "description": "kapacitor configuration", "schema": { "$ref": "#/definitions/Kapacitor" }, "required": true } ], "responses": { "200": { "description": "Kapacitor's configuration was changed", "schema": { "$ref": "#/definitions/Kapacitor" } }, "404": { "description": "Happens when trying to access a non-existent data source or kapacitor.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } }, "delete": { "tags": [ "sources", "kapacitors" ], "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the source", "required": true }, { "name": "kapa_id", "in": "path", "type": "string", "description": "ID of the kapacitor", "required": true } ], "summary": "This specific kapacitor will be removed. All associated rule resources will also be removed from the store.", "responses": { "204": { "description": "kapacitor has been removed." }, "404": { "description": "Unknown Data source or Kapacitor id", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "Unexpected internal service error", "schema": { "$ref": "#/definitions/Error" } } } } }, "/sources/{id}/kapacitors/{kapa_id}/rules": { "get": { "tags": [ "sources", "kapacitors", "rules" ], "description": "Get all defined alert rules.", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the source", "required": true }, { "name": "kapa_id", "in": "path", "type": "string", "description": "ID of the kapacitor backend.", "required": true } ], "responses": { "200": { "description": "All alert rules for this specific kapacitor are returned", "schema": { "$ref": "#/definitions/Rules" } }, "404": { "description": "Data source or Kapacitor ID does not exist.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "Internal server error", "schema": { "$ref": "#/definitions/Error" } } } }, "post": { "tags": [ "sources", "kapacitors", "rules" ], "description": "Create kapacitor alert rule", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the source", "required": true }, { "name": "kapa_id", "in": "path", "type": "string", "description": "ID of the kapacitor backend.", "required": true }, { "name": "rule", "in": "body", "description": "Rule to generate alert rule", "schema": { "$ref": "#/definitions/Rule" }, "required": true } ], "responses": { "201": { "description": "Successfully created new kapacitor alert rule", "headers": { "Location": { "type": "string", "format": "url", "description": "Location of the newly created kapacitor rule resource." } }, "schema": { "$ref": "#/definitions/Rule" } }, "404": { "description": "Source ID or Kapacitor ID does not exist.", "schema": { "$ref": "#/definitions/Error" } }, "422": { "description": "Source ID , Kapacitor ID or alert are unprocessable", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "Internal server error; generally a problem creating alert in kapacitor", "schema": { "$ref": "#/definitions/Error" } } } } }, "/sources/{id}/kapacitors/{kapa_id}/rules/{rule_id}": { "get": { "tags": [ "sources", "kapacitors", "rules" ], "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the source", "required": true }, { "name": "kapa_id", "in": "path", "type": "string", "description": "ID of the kapacitor", "required": true }, { "name": "rule_id", "in": "path", "type": "string", "description": "ID of the rule", "required": true } ], "summary": "Specific kapacitor alert rule", "description": "Alerting rule for kapacitor", "responses": { "200": { "description": "Alert exists and has a specific TICKscript", "schema": { "$ref": "#/definitions/Rule" } }, "404": { "description": "Unknown data source, kapacitor id, or rule id", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "Unexpected internal service error", "schema": { "$ref": "#/definitions/Error" } } } }, "put": { "tags": [ "sources", "kapacitors", "rules" ], "summary": "Update rule alert rule configuration", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the source", "required": true }, { "name": "kapa_id", "in": "path", "type": "string", "description": "ID of a kapacitor backend", "required": true }, { "name": "rule_id", "in": "path", "type": "string", "description": "ID of a rule", "required": true }, { "name": "rule", "in": "body", "description": "Rule update", "schema": { "$ref": "#/definitions/Rule" }, "required": true } ], "responses": { "200": { "description": "Alert configuration was changed", "schema": { "$ref": "#/definitions/Rule" } }, "404": { "description": "Happens when trying to access a non-existent data source, kapacitor, or rule.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } }, "delete": { "tags": [ "sources", "kapacitors", "rules" ], "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the source", "required": true }, { "name": "kapa_id", "in": "path", "type": "string", "description": "ID of the kapacitor", "required": true }, { "name": "rule_id", "in": "path", "type": "string", "description": "ID of the rule", "required": true } ], "summary": "This specific alert rule will be removed.", "responses": { "204": { "description": "Alert rule has been removed." }, "404": { "description": "Unknown Data source, Kapacitor id, or alert rule", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "Unexpected internal service error", "schema": { "$ref": "#/definitions/Error" } } } } }, "/sources/{id}/kapacitors/{kapa_id}/proxy": { "get": { "tags": [ "sources", "kapacitors", "proxy" ], "description": "GET to `path` of kapacitor. The response and status code from kapacitor is directly returned.", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the source", "required": true }, { "name": "kapa_id", "in": "path", "type": "string", "description": "ID of the kapacitor backend.", "required": true }, { "name": "path", "in": "query", "type": "string", "description": "The kapacitor API path to use in the proxy redirect", "required": true } ], "responses": { "204": { "description": "Kapacitor returned no content" }, "404": { "description": "Data source or Kapacitor ID does not exist.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "Response directly from kapacitor", "schema": { "$ref": "#/definitions/KapacitorProxyResponse" } } } }, "delete": { "tags": [ "sources", "kapacitors", "proxy" ], "description": "DELETE to `path` of kapacitor. The response and status code from kapacitor is directly returned.", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the source", "required": true }, { "name": "kapa_id", "in": "path", "type": "string", "description": "ID of the kapacitor backend.", "required": true }, { "name": "path", "in": "query", "type": "string", "description": "The kapacitor API path to use in the proxy redirect", "required": true } ], "responses": { "204": { "description": "Kapacitor returned no content" }, "404": { "description": "Data source or Kapacitor ID does not exist.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "Response directly from kapacitor", "schema": { "$ref": "#/definitions/KapacitorProxyResponse" } } } }, "patch": { "tags": [ "sources", "kapacitors", "proxy" ], "description": "PATCH body directly to configured kapacitor. The response and status code from kapacitor is directly returned.", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the source", "required": true }, { "name": "kapa_id", "in": "path", "type": "string", "description": "ID of the kapacitor backend.", "required": true }, { "name": "path", "in": "query", "type": "string", "description": "The kapacitor API path to use in the proxy redirect", "required": true }, { "name": "query", "in": "body", "description": "Kapacitor body", "schema": { "$ref": "#/definitions/KapacitorProxy" }, "required": true } ], "responses": { "204": { "description": "Kapacitor returned no content" }, "404": { "description": "Data source or Kapacitor ID does not exist.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "Response directly from kapacitor", "schema": { "$ref": "#/definitions/KapacitorProxyResponse" } } } }, "post": { "tags": [ "sources", "kapacitors", "proxy" ], "description": "POST body directly to configured kapacitor. The response and status code from kapacitor is directly returned.", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the source", "required": true }, { "name": "kapa_id", "in": "path", "type": "string", "description": "ID of the kapacitor backend.", "required": true }, { "name": "path", "in": "query", "type": "string", "description": "The kapacitor API path to use in the proxy redirect", "required": true }, { "name": "query", "in": "body", "description": "Kapacitor body", "schema": { "$ref": "#/definitions/KapacitorProxy" }, "required": true } ], "responses": { "204": { "description": "Kapacitor returned no content" }, "404": { "description": "Kapacitor ID does not exist.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "Response directly from kapacitor", "schema": { "$ref": "#/definitions/KapacitorProxyResponse" } } } } }, "/mappings": { "get": { "tags": [ "layouts", "mappings" ], "summary": "Mappings between app names and measurements", "description": "Mappings provide a means to alias measurement names found within a telegraf database and application layouts found within Chronograf\n", "responses": { "200": { "description": "An array of mappings", "schema": { "$ref": "#/definitions/Mappings" } }, "default": { "description": "Unexpected internal service error", "schema": { "$ref": "#/definitions/Error" } } } } }, "/layouts": { "get": { "tags": [ "layouts" ], "summary": "Pre-configured layouts", "parameters": [ { "name": "measurement", "in": "query", "description": "Returns layouts with this measurement", "required": false, "type": "array", "items": { "type": "string" }, "collectionFormat": "multi" }, { "name": "app", "in": "query", "description": "Returns layouts with this app", "required": false, "type": "array", "items": { "type": "string" }, "collectionFormat": "multi" } ], "description": "Layouts are a collection of `Cells` that visualize time-series data.\n", "responses": { "200": { "description": "An array of layouts", "schema": { "$ref": "#/definitions/Layouts" } }, "default": { "description": "Unexpected internal service error", "schema": { "$ref": "#/definitions/Error" } } } }, "post": { "tags": [ "layouts" ], "summary": "Create new layout", "parameters": [ { "name": "layout", "in": "body", "description": "Defines the layout and queries of the cells within the layout.", "schema": { "$ref": "#/definitions/Layout" } } ], "responses": { "201": { "description": "Successfully created new layout", "headers": { "Location": { "type": "string", "format": "url", "description": "Location of the newly created layout" } }, "schema": { "$ref": "#/definitions/Layout" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } } }, "/layouts/{id}": { "get": { "tags": [ "layouts" ], "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the layout", "required": true } ], "summary": "Specific pre-configured layout containing cells and queries.", "description": "layouts will hold information about how to layout the page of graphs.\n", "responses": { "200": { "description": "Returns the specified layout containing `cells`.", "schema": { "$ref": "#/definitions/Layout" } }, "404": { "description": "Unknown layout id", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "Unexpected internal service error", "schema": { "$ref": "#/definitions/Error" } } } }, "delete": { "tags": [ "layouts" ], "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of the layout", "required": true } ], "summary": "This specific layout will be removed from the data store", "responses": { "204": { "description": "Layout has been removed." }, "404": { "description": "Unknown layout id", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "Unexpected internal service error", "schema": { "$ref": "#/definitions/Error" } } } }, "put": { "tags": [ "layouts" ], "summary": "Replace layout configuration.", "parameters": [ { "name": "id", "in": "path", "type": "string", "description": "ID of a layout", "required": true }, { "name": "config", "in": "body", "description": "layout configuration update parameters", "schema": { "$ref": "#/definitions/Layout" }, "required": true } ], "responses": { "200": { "description": "Layout has been replaced and the new layout is returned.", "schema": { "$ref": "#/definitions/Layout" } }, "404": { "description": "Happens when trying to access a non-existent layout.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } } }, "/dashboards": { "get": { "tags": [ "dashboards" ], "summary": "List of all dashboards", "responses": { "200": { "description": "An array of dashboards", "schema": { "$ref": "#/definitions/Dashboards" } }, "default": { "description": "Unexpected internal service error", "schema": { "$ref": "#/definitions/Error" } } } }, "post": { "tags": [ "dashboards" ], "summary": "Create new dashboard", "parameters": [ { "name": "dashboard", "in": "body", "description": "Configuration options for new dashboard", "schema": { "$ref": "#/definitions/Dashboard" } } ], "responses": { "201": { "description": "Successfully created new dashboard", "headers": { "Location": { "type": "string", "format": "url", "description": "Location of the newly created dashboard resource." } }, "schema": { "$ref": "#/definitions/Dashboard" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } } }, "/dashboards/{id}": { "get": { "tags": [ "dashboards" ], "parameters": [ { "name": "id", "in": "path", "type": "integer", "description": "ID of the dashboard", "required": true } ], "summary": "Specific dashboard", "description": "Dashboards contain visual display information as well as links to queries", "responses": { "200": { "description": "Returns the specified dashboard with links to queries.", "schema": { "$ref": "#/definitions/Dashboard" } }, "404": { "description": "Unknown dashboard id", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "Unexpected internal service error", "schema": { "$ref": "#/definitions/Error" } } } }, "delete": { "tags": [ "dashboards" ], "parameters": [ { "name": "id", "in": "path", "type": "integer", "description": "ID of the layout", "required": true } ], "summary": "Deletes the specified dashboard", "responses": { "204": { "description": "Dashboard has been removed." }, "404": { "description": "Unknown dashboard id", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "Unexpected internal service error", "schema": { "$ref": "#/definitions/Error" } } } }, "put": { "tags": [ "dashboards" ], "summary": "Replace dashboard information.", "parameters": [ { "name": "id", "in": "path", "type": "integer", "description": "ID of a dashboard", "required": true }, { "name": "config", "in": "body", "description": "dashboard configuration update parameters", "schema": { "$ref": "#/definitions/Dashboard" }, "required": true } ], "responses": { "200": { "description": "Dashboard has been replaced and the new dashboard is returned.", "schema": { "$ref": "#/definitions/Dashboard" } }, "404": { "description": "Happens when trying to access a non-existent dashboard.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } }, "patch": { "tags": [ "layouts" ], "summary": "Update dashboard information.", "description": "Update either the dashboard name or the dashboard cells", "parameters": [ { "name": "id", "in": "path", "type": "integer", "description": "ID of a dashboard", "required": true }, { "name": "config", "in": "body", "description": "dashboard configuration update parameters. Must be either name or cells", "schema": { "$ref": "#/definitions/Dashboard" }, "required": true } ], "responses": { "200": { "description": "Dashboard has been updated and the new dashboard is returned.", "schema": { "$ref": "#/definitions/Dashboard" } }, "404": { "description": "Happens when trying to access a non-existent dashboard.", "schema": { "$ref": "#/definitions/Error" } }, "default": { "description": "A processing or an unexpected error.", "schema": { "$ref": "#/definitions/Error" } } } } } }, "definitions": { "Databases": { "type": "object", "required": [ "databases" ], "properties": { "databases": { "type": "array", "items": { "$ref": "#/definitions/Database" } } } }, "Database": { "type": "object", "required": [ "name" ], "example": { "name": "NOAA_water_database", "duration": "3d", "replication": 3, "shardDuration": "3h", "links": { "self": "/chronograf/v1/sources/1/dbs/NOAA_water_database", "rps": "/chronograf/v1/sources/1/dbs/NOAA_water_database/rps" } }, "properties": { "name": { "type": "string", "description": "The identifying name of the database", }, "duration": { "type": "string", "description": "the duration of the default retention policy" }, "replication": { "type": "integer", "format": "int32", "description": "how many copies of the data are stored in the cluster" }, "shardDuration": { "type": "string", "description": "the interval spanned by each shard group" }, "links": { "type": "object", "properties": { "self": { "type": "string", "description": "Self link mapping to this resource", "format": "url" }, "rps": { "type": "string", "description": "Link to retention policies for this database", "format": "url" } } } } }, "Kapacitors": { "type": "object", "required": [ "kapacitors" ], "properties": { "kapacitors": { "type": "array", "items": { "$ref": "#/definitions/Kapacitor" } } } }, "Kapacitor": { "type": "object", "required": [ "name", "url" ], "example": { "id": "4", "name": "kapa", "url": "http://localhost:9092", "links": { "proxy": "/chronograf/v1/sources/4/kapacitors/4/proxy", "self": "/chronograf/v1/sources/4/kapacitors/4", "rules": "/chronograf/v1/sources/4/kapacitors/4/rules" } }, "properties": { "id": { "type": "string", "description": "Unique identifier representing a kapacitor instance.", "readOnly": true }, "name": { "type": "string", "description": "User facing name of kapacitor instance." }, "username": { "type": "string", "description": "Username for authentication to kapacitor." }, "password": { "type": "string", "description": "Password is in cleartext." }, "url": { "type": "string", "format": "url", "description": "URL for the kapacitor backend (e.g. http://localhost:9092)" }, "links": { "type": "object", "properties": { "self": { "type": "string", "description": "Self link mapping to this resource", "format": "url" }, "proxy": { "type": "string", "description": "URL location of proxy endpoint for this kapacitor", "format": "url" }, "rules": { "type": "string", "description": "URL location of rules endpoint for this kapacitor", "format": "url" } } } } }, "KapacitorProxy": { "description": "Entirely used as the body for the request to the kapacitor backend.", "type": "object" }, "KapacitorProxyResponse": { "description": "Entire response from the kapacitor backend.", "type": "object" }, "Rules": { "type": "object", "required": [ "rules" ], "properties": { "rules": { "type": "array", "items": { "$ref": "#/definitions/Rule" } } } }, "QueryConfig": { "type": "object", "example": { "id": "ce72917d-1ecb-45ea-a6cb-4c122deb93c7", "database": "telegraf", "measurement": "cpu", "retentionPolicy": "autogen", "fields": [ { "field": "usage_system", "funcs": [ "max" ] } ], "tags": {}, "groupBy": { "time": "10m", "tags": [] }, "areTagsAccepted": true }, "properties": { "id": { "type": "string" }, "database": { "type": "string" }, "measurement": { "type": "string" }, "retentionPolicy": { "type": "string" }, "areTagsAccepted": { "type": "boolean" }, "rawText": { "type": "string" }, "tags": { "type": "object" }, "groupBy": { "type": "object", "properties": { "time": { "type": "string" }, "tags": { "type": "array", "items": { "type": "string" } } }, "required": [ "time", "tags" ] }, "fields": { "type": "array", "items": { "type": "object", "properties": { "field": { "type": "string" }, "funcs": { "type": "array", "items": { "type": "string" } } }, "required": [ "field", "funcs" ] } } }, "required": [ "database", "measurement", "retentionPolicy", "areTagsAccepted", "tags", "groupBy", "fields" ] }, "KapacitorNode": { "type": "object", "description": "Represents a node in the kapacitor TICKscript graph", "required": [ "name" ], "properties": { "name": { "type": "string", "description": "Name of the kapacitor node e.g. slack" }, "args": { "type": "array", "description": "All arguments to the named node", "items": { "type": "string" } }, "properties": { "type": "array", "description": "All properties attached to the kapacitor node", "items": { "$ref": "#/definitions/KapacitorProperty" } } } }, "KapacitorProperty": { "type": "object", "description": "Represents a property attached to a node in the kapacitor TICKscript graph", "required": [ "name" ], "properties": { "name": { "type": "string", "description": "Name of the kapacitor property e.g. channel for a slack ndoe" }, "args": { "type": "array", "description": "All arguments to the named property", "items": { "type": "string" } } } }, "RetentionPolicies": { "type": "object", "required": [ "retentionPolicies" ], "properties": { "retentionPolicies": { "type": "array", "items": { "$ref": "#/definitions/RetentionPolicy" } } } }, "RetentionPolicy": { "type": "object", "required": [ "name", "duration", "replication" ], "example": { "name": "weekly", "duration": "7d", "replication": 1, "shardDuration": "7d", "default": true, "links": { "self": "/chronograf/v1/ousrces/1/dbs/NOAA_water_database/rps/liquid" } }, "properties": { "name": { "type": "string", "description": "The identifying name of the retention policy", }, "duration": { "type": "string", "description": "the duration of the retention policy" }, "replication": { "type": "integer", "format": "int32", "description": "how many copies of the data are stored in the cluster" }, "shardDuration": { "type": "string", "description": "the interval spanned by each shard group" }, "default": { "type": "boolean", "description": "Indicates whether this retention policy should be the default" }, "links": { "type": "object", "properties": { "self": { "type": "string", "description": "Self link mapping to this resource", "format": "url" } } } } }, "Rule": { "type": "object", "example": { "id": "chronograf-v1-b2b065ea-79bd-4e4f-8c0d-d0ef68477d38", "query": { "id": "ce72917d-1ecb-45ea-a6cb-4c122deb93c7", "database": "telegraf", "measurement": "cpu", "retentionPolicy": "autogen", "fields": [ { "field": "usage_system", "funcs": [ "max" ] } ], "tags": {}, "groupBy": { "time": "10m", "tags": [] }, "areTagsAccepted": true }, "every": "30s", "alerts": [ "alerta" ], "alertNodes": [ { "name": "alerta", "args": [], "properties": [] } ], "message": "too much spam", "details": "muh body", "trigger": "threshold", "values": { "operator": "greater than", "value": "10" }, "name": "Untitled Rule", "tickscript": "var db = 'telegraf'\n\nvar rp = 'autogen'\n\nvar measurement = 'cpu'\n\nvar groupBy = []\n\nvar whereFilter = lambda: TRUE\n\nvar period = 10m\n\nvar every = 30s\n\nvar name = 'Untitled Rule'\n\nvar idVar = name + ':{{.Group}}'\n\nvar message = 'too much spam'\n\nvar idTag = 'alertID'\n\nvar levelTag = 'level'\n\nvar messageField = 'message'\n\nvar durationField = 'duration'\n\nvar outputDB = 'chronograf'\n\nvar outputRP = 'autogen'\n\nvar outputMeasurement = 'alerts'\n\nvar triggerType = 'threshold'\n\nvar details = 'muh body'\n\nvar crit = 10\n\nvar data = stream\n |from()\n .database(db)\n .retentionPolicy(rp)\n .measurement(measurement)\n .groupBy(groupBy)\n .where(whereFilter)\n |window()\n .period(period)\n .every(every)\n .align()\n |max('usage_system')\n .as('value')\n\nvar trigger = data\n |alert()\n .crit(lambda: \"value\" > crit)\n .stateChangesOnly()\n .message(message)\n .id(idVar)\n .idTag(idTag)\n .levelTag(levelTag)\n .messageField(messageField)\n .durationField(durationField)\n .details(details)\n .alerta()\n\ntrigger\n |influxDBOut()\n .create()\n .database(outputDB)\n .retentionPolicy(outputRP)\n .measurement(outputMeasurement)\n .tag('alertName', name)\n .tag('triggerType', triggerType)\n\ntrigger\n |httpOut('output')\n", "status": "enabled", "links": { "self": "/chronograf/v1/sources/5/kapacitors/5/rules/chronograf-v1-b2b065ea-79bd-4e4f-8c0d-d0ef68477d38", "kapacitor": "/chronograf/v1/sources/5/kapacitors/5/proxy?path=%2Fkapacitor%2Fv1%2Ftasks%2Fchronograf-v1-b2b065ea-79bd-4e4f-8c0d-d0ef68477d38", "output": "/chronograf/v1/sources/5/kapacitors/5/proxy?path=%2Fkapacitor%2Fv1%2Ftasks%2Fchronograf-v1-b2b065ea-79bd-4e4f-8c0d-d0ef68477d38%2Foutput" } }, "required": [ "query", "every", "trigger" ], "properties": { "id": { "type": "string", "description": "ID for this rule; the ID is shared with kapacitor" }, "query": { "$ref": "#/definitions/QueryConfig" }, "name": { "type": "string", "description": "User facing name of the alerting rule" }, "every": { "type": "string", "description": "Golang duration string specifying how often the alert condition is checked" }, "alerts": { "type": "array", "description": "Array of alerting services to warn if the alert is triggered", "items": { "type": "string", "enum": [ "alerta", "post", "http", "hipchat", "opsgenie", "pagerduty", "victorops", "smtp", "email", "exec", "sensu", "slack", "talk", "telegram", "tcp" ] } }, "alertNodes": { "type": "array", "description": "Arguments and properties to add to alert", "items": { "$ref": "#/definitions/KapacitorNode" } }, "message": { "type": "string", "description": "Message to send when alert occurs." }, "details": { "type": "string", "description": "Template for constructing a detailed HTML message for the alert. (Currently, only used for email/smtp" }, "trigger": { "type": "string", "description": "Trigger defines the alerting structure; deadman alert if no data are received for the specified time range; relative alert if the data change relative to the data in a different time range; threshold alert if the data cross a boundary", "enum": [ "deadman", "relative", "threshold" ] }, "values": { "type": "object", "description": "Alerting logic for trigger type", "properties": { "change": { "description": "Specifies if the change is percent or absolute", "type": "string", "enum": [ "% change", "change" ] }, "period": { "description": "Length of time before deadman is alerted (golang duration)", "type": "string" }, "shift": { "description": "Amount of time to look into the past to compare to the present (golang duration)", "type": "string" }, "operator": { "description": "Operator for alert comparison", "type": "string", "enum": [ "greater than", "less than", "equal to or less than", "equal to or greater", "equal to", "not equal to", "inside range", "outside range" ] }, "value": { "description": "Value is the boundary value when alert goes critical", "type": "string" }, "rangeValue": { "description": "Optional value for range comparisions", "type": "string" } } }, "tickscript": { "type": "string", "description": "TICKscript representing this rule" }, "status": { "type": "string", "description": "Represents if this rule is enabled or disabled in kapacitor", "enum": [ "enabled", "disabled" ] }, "links": { "type": "object", "required": [ "self", "kapacitor" ], "properties": { "self": { "description": "Self link pointing to this rule resource", "type": "string", "format": "uri" }, "kapacitor": { "description": "Link pointing to the kapacitor proxy for this rule including the path query parameter.", "type": "string", "format": "uri" }, "output": { "description": "Link pointing to the kapacitor httpOut node of the tickscript; includes the path query argument", "type": "string", "format": "uri" } } } } }, "Sources": { "type": "object", "required": [ "sources" ], "properties": { "sources": { "type": "array", "items": { "$ref": "#/definitions/Source" } } } }, "Source": { "type": "object", "example": { "id": "4", "name": "Influx 1", "url": "http://localhost:8086", "default": false, "telegraf": "telegraf", "links": { "self": "/chronograf/v1/sources/4", "kapacitors": "/chronograf/v1/sources/4/kapacitors", "proxy": "/chronograf/v1/sources/4/proxy", "permissions": "/chronograf/v1/sources/4/permissions", "users": "/chronograf/v1/sources/4/users", "roles": "/chronograf/v1/sources/4/roles" } }, "required": [ "url" ], "properties": { "id": { "type": "string", "description": "Unique identifier representing a specific data source.", "readOnly": true }, "name": { "type": "string", "description": "User facing name of data source" }, "type": { "type": "string", "description": "Format of the data source", "readOnly": true, "enum": [ "influx", "influx-enterprise", "influx-relay" ] }, "username": { "type": "string", "description": "Username for authentication to data source" }, "password": { "type": "string", "description": "Password is in cleartext." }, "url": { "type": "string", "format": "url", "description": "URL for the time series data source backend (e.g. http://localhost:8086)" }, "metaUrl": { "type": "string", "format": "url", "description": "URL for the influxdb meta node" }, "insecureSkipVerify": { "type": "boolean", "description": "True means any certificate presented by the source is accepted. Typically used for self-signed certs. Probably should only be used for testing." }, "default": { "type": "boolean", "description": "Indicates whether this source is the default source" }, "telegraf": { "type": "string", "description": "Database where telegraf information is stored for this source", "default": "telegraf" }, "links": { "type": "object", "properties": { "self": { "type": "string", "description": "Self link mapping to this resource", "format": "url" }, "proxy": { "type": "string", "description": "URL location of proxy endpoint for this source", "format": "url" }, "kapacitors": { "type": "string", "description": "URL location of the kapacitors endpoint for this source", "format": "url" }, "users": { "type": "string", "description": "URL location of the users endpoint for this source", "format": "url" }, "permissions": { "type": "string", "description": "URL location of the permissions endpoint for this source", "format": "url" }, "roles": { "type": "string", "description": "Optional path to the roles endpoint IFF it is supported on this source", "format": "url" } } } } }, "Proxy": { "type": "object", "example": { "query": "select * from cpu where time > now() - 10m", "db": "telegraf", "rp": "autogen", "format": "raw" }, "required": [ "query" ], "properties": { "query": { "type": "string" }, "db": { "type": "string" }, "rp": { "type": "string" }, "format": { "type": "string", "enum": [ "raw" ], "default": "raw" } } }, "ProxyResponse": { "type": "object", "example": { "results": [ { "statement_id": 0, "series": [ { "name": "cpu", "columns": [ "time", "cpu", "host", "usage_guest", "usage_guest_nice", "usage_idle", "usage_iowait", "usage_irq", "usage_nice", "usage_softirq", "usage_steal", "usage_system", "usage_user" ], "values": [ [ 1487785510000, "cpu-total", "ChristohersMBP2.lan", 0, 0, 76.6916354556804, 0, 0, 0, 0, 0, 4.781523096129837, 18.526841448189764 ] ] } ] } ] }, "properties": { "results": { "description": "results from influx", "type": "object" } } }, "Roles": { "type": "object", "properties": { "roles": { "type": "array", "items": { "$ref": "#/definitions/Role" } } }, "example": { "roles": [ { "users": [ { "name": "admin", "links": { "self": "/chronograf/v1/sources/3/users/admin" } } ], "name": "timetravelers", "permissions": [ { "scope": "database", "name": "telegraf", "allowed": [ "ReadData", "WriteData" ] } ], "links": { "self": "/chronograf/v1/sources/3/roles/timetravelers" } } ] } }, "Role": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string", "description": "Unique name of the role", "maxLength": 254, "minLength": 1 }, "users": { "$ref": "#/definitions/Users" }, "permissions": { "$ref": "#/definitions/Permissions" }, "links": { "type": "object", "description": "URL relations of this role", "properties": { "self": { "type": "string", "format": "url", "description": "URI of resource." } } } }, "example": { "users": [ { "name": "admin", "links": { "self": "/chronograf/v1/sources/3/users/admin" } } ], "name": "timetravelers", "permissions": [ { "scope": "database", "name": "telegraf", "allowed": [ "ReadData", "WriteData" ] } ], "links": { "self": "/chronograf/v1/sources/3/roles/timetravelers" } } }, "Users": { "type": "object", "properties": { "users": { "type": "array", "items": { "$ref": "#/definitions/User" } } }, "example": { "users": [ { "name": "docbrown", "permissions": [ { "scope": "all", "allowed": [ "ViewAdmin", "ViewChronograf", "CreateDatabase", "CreateUserAndRole", "DropDatabase", "DropData", "ReadData", "WriteData", "ManageShard", "ManageContinuousQuery", "ManageQuery", "ManageSubscription", "Monitor", "KapacitorAPI" ] } ], "roles": [ { "name": "timetravelers", "permissions": [ { "scope": "database", "name": "telegraf", "allowed": [ "ReadData", "WriteData" ] } ], "links": { "self": "/chronograf/v1/sources/3/roles/timetravelers" } } ], "links": { "self": "/chronograf/v1/sources/3/users/docbrown" } } ] } }, "User": { "type": "object", "properties": { "name": { "type": "string", "description": "Unique name of the user", "maxLength": 254, "minLength": 1 }, "password": { "type": "string" }, "permissions": { "$ref": "#/definitions/Permissions" }, "links": { "type": "object", "description": "URL relations of this user", "properties": { "self": { "type": "string", "format": "url", "description": "URI of resource." } } } }, "example": { "name": "docbrown", "permissions": [ { "scope": "all", "allowed": [ "ViewAdmin", "ViewChronograf", "CreateDatabase", "CreateUserAndRole", "DropDatabase", "DropData", "ReadData", "WriteData", "ManageShard", "ManageContinuousQuery", "ManageQuery", "ManageSubscription", "Monitor", "KapacitorAPI" ] } ], "roles": [ { "name": "timetravelers", "permissions": [ { "scope": "database", "name": "telegraf", "allowed": [ "ReadData", "WriteData" ] } ], "links": { "self": "/chronograf/v1/sources/3/roles/timetravelers" } } ], "links": { "self": "/chronograf/v1/sources/3/users/docbrown" } } }, "Permissions": { "description": "Permissions represent the entire set of permissions a User or Role may have", "type": "array", "items": { "$ref": "#/definitions/Permission" } }, "Permission": { "description": "Permission is a specific allowance for User or Role bound to a scope of the data source", "type": "object", "required": [ "scope", "allowed" ], "properties": { "scope": { "type": "string", "description": "Describes if the permission is for all databases or restricted to one database", "enum": [ "all", "database" ] }, "name": { "type": "string", "description": "If the scope is database this identifies the name of the database" }, "allowed": { "$ref": "#/definitions/Allowances" } }, "example": { "scope": "database", "name": "telegraf", "allowed": [ "READ", "WRITE" ] } }, "AllPermissions": { "description": "All possible permissions for this particular datasource. Used as a static list", "type": "object", "properties": { "permissions": { "$ref": "#/definitions/Permissions" }, "links": { "type": "object", "properties": { "self": { "description": "Relative link back to the permissions endpoint", "type": "string", "format": "uri" }, "source": { "description": "Relative link to host with these permissiosn", "type": "string", "format": "uri" } } } } }, "Allowances": { "description": "Allowances defines what actions a user can have on a scoped permission", "type": "array", "items": { "type": "string", "description": "OSS InfluxDB is READ and WRITE. Enterprise is all others", "enum": [ "READ", "WRITE", "NoPermissions", "ViewAdmin", "ViewChronograf", "CreateDatabase", "CreateUserAndRole", "AddRemoveNode", "DropDatabase", "DropData", "ReadData", "WriteData", "Rebalance", "ManageShard", "ManageContinuousQuery", "ManageQuery", "ManageSubscription", "Monitor", "CopyShard", "KapacitorAPI", "KapacitorConfigAPI" ] } }, "Layouts": { "required": [ "layouts" ], "type": "object", "properties": { "layouts": { "type": "array", "items": { "$ref": "#/definitions/Layout" } } } }, "Layout": { "type": "object", "required": [ "cells", "app", "measurement" ], "properties": { "id": { "type": "string", "description": "ID is an opaque string that uniquely identifies this layout." }, "app": { "type": "string", "description": "App is the user facing name of this Layout" }, "measurement": { "type": "string", "description": "Measurement is the descriptive name of the time series data." }, "cells": { "type": "array", "description": "Cells are the individual visualization elements.", "items": { "$ref": "#/definitions/Cell" } }, "link": { "$ref": "#/definitions/Link" } }, "example": { "id": "0e980b97-c162-487b-a815-3f955df62430", "app": "docker", "measurement": "docker_container_net", "autoflow": true, "cells": [ { "x": 0, "y": 0, "w": 4, "h": 4, "i": "4c79cefb-5152-410c-9b88-74f9bff7ef23", "name": "Docker - Container Network", "queries": [ { "query": "SELECT derivative(mean(\"tx_bytes\"), 10s) AS \"net_tx_bytes\" FROM \"docker_container_net\"", "groupbys": [ "\"container_name\"" ] }, { "query": "SELECT derivative(mean(\"rx_bytes\"), 10s) AS \"net_rx_bytes\" FROM \"docker_container_net\"", "groupbys": [ "\"container_name\"" ] } ], "type": "" } ], "link": { "href": "/chronograf/v1/layouts/0e980b97-c162-487b-a815-3f955df62430", "rel": "self" } } }, "Mappings": { "type": "object", "required": [ "mappings" ], "properties": { "mappings": { "type": "array", "items": { "$ref": "#/definitions/Mapping" } } } }, "Mapping": { "type": "object", "required": [ "measurement", "name" ], "properties": { "measurement": { "description": "The measurement where data for this mapping is found", "type": "string" }, "name": { "description": "The application name which will be assigned to the corresponding measurement", "type": "string" } }, "example": { "measurement": "riak", "name": "riak" } }, "Cell": { "type": "object", "required": [ "i", "x", "y", "w", "h" ], "properties": { "i": { "description": "Unique ID of Cell", "type": "string", "format": "uuid4" }, "x": { "description": "X-coordinate of Cell in the Layout", "type": "integer", "format": "int32" }, "y": { "description": "Y-coordinate of Cell in the Layout", "type": "integer", "format": "int32" }, "w": { "description": "Width of Cell in the Layout", "type": "integer", "format": "int32" }, "h": { "description": "Height of Cell in the Layout", "type": "integer", "format": "int32" }, "queries": { "description": "Time-series data queries for Cell.", "type": "array", "items": { "$ref": "#/definitions/LayoutQuery" } }, "type": { "description": "Cell visualization type", "type": "string", "format": "uuid4" } }, "example": { "x": 5, "y": 5, "w": 4, "h": 4, "name": "usage_user", "queries": [ { "query": "SELECT mean(\"usage_user\") AS \"usage_user\" FROM \"cpu\"", "label": "%" } ], "type": "line" } }, "LayoutQuery": { "type": "object", "required": [ "query" ], "properties": { "label": { "description": "Optional Y-axis user-facing label for this query", "type": "string" }, "range": { "description": "Optional default range of the Y-axis", "type": "object", "required": [ "upper", "lower" ], "properties": { "upper": { "description": "Upper bound of the display range of the Y-axis", "type": "integer", "format": "int64" }, "lower": { "description": "Lower bound of the display range of the Y-axis", "type": "integer", "format": "int64" } } }, "query": { "type": "string" }, "wheres": { "description": "Defines the condition clauses for influxdb", "type": "array", "items": { "type": "string" } }, "groupbys": { "description": "Defines the group by clauses for influxdb", "type": "array", "items": { "type": "string" } } }, "example": { "label": "# warnings", "query": "SELECT count(\"check_id\") as \"Number Warning\" FROM consul_health_checks", "wheres": [ "\"status\" = 'warning'" ], "groupbys": [ "\"service_name\"" ] } }, "Dashboards": { "description": "a list of dashboards", "type": "object", "properties": { "dashboards": { "type": "array", "items": { "$ref": "#/definitions/Dashboard" } } } }, "Dashboard": { "type": "object", "properties": { "id": { "description": "the unique dashboard id", "type": "integer", "format": "int64" }, "cells": { "description": "a list of dashboard visualizations", "type": "array", "items": { "description": "cell visualization information", "type": "object", "required": [ "queries" ], "properties": { "x": { "description": "X-coordinate of Cell in the Dashboard", "type": "integer", "format": "int32" }, "y": { "description": "Y-coordinate of Cell in the Dashboard", "type": "integer", "format": "int32" }, "w": { "description": "Width of Cell in the Dashboard", "type": "integer", "format": "int32", "minimum": 1, "default": 4 }, "h": { "description": "Height of Cell in the Dashboard", "type": "integer", "format": "int32", "minimum": 1, "default": 4 }, "queries": { "description": "Time-series data queries for Cell.", "type": "array", "items": { "$ref": "#/definitions/LayoutQuery" } }, "type": { "description": "Cell visualization type", "type": "string", "enum": [ "single-stat", "line", "line-plus-single-stat", "line-stacked", "line-stepplot" ], "default": "line" } } } }, "name": { "description": "the user-facing name of the dashboard", "type": "string" }, "links": { "type": "object", "properties": { "self": { "type": "string", "description": "Self link mapping to this resource", "format": "url" } } } }, "example": { "id": 4, "cells": [ { "x": 5, "y": 5, "w": 4, "h": 4, "name": "usage_user", "queries": [ { "query": "SELECT mean(\"usage_user\") AS \"usage_user\" FROM \"cpu\"", "label": "%" } ], "type": "line" }, { "x": 0, "y": 0, "w": 4, "h": 4, "name": "usage_system", "queries": [ { "query": "SELECT mean(\"usage_system\") AS \"usage_system\" FROM \"cpu\"", "label": "%" } ], "type": "line" } ], "name": "lalalalala", "links": { "self": "/chronograf/v1/dashboards/4" } } }, "Routes": { "type": "object", "properties": { "me": { "description": "Location of the me endpoint.", "type": "string", "format": "url" }, "layouts": { "description": "Location of the layouts endpoint", "type": "string", "format": "url" }, "sources": { "description": "Location of the sources endpoint", "type": "string", "format": "url" }, "mappings": { "description": "Location of the application mappings endpoint", "type": "string", "format": "url" }, "dashboards": { "description": "location of the dashboards endpoint", "type": "string", "format": "url" } }, "example": { "layouts": "/chronograf/v1/layouts", "mappings": "/chronograf/v1/mappings", "sources": "/chronograf/v1/sources", "me": "/chronograf/v1/me", "dashboards": "/chronograf/v1/dashboards" } }, "Link": { "type": "object", "required": [ "rel", "href" ], "readOnly": true, "description": "URI of resource.", "properties": { "rel": { "type": "string" }, "href": { "type": "string", "format": "url" } } }, "Error": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" } } } } }