The dashboard API will support collections of resizable InfluxQL visualizations.
Here are the objects we are thinking about; dashboards contain layouts which contain queries.
{
"links": {
"self": "/chronograf/v1/dashboards/myid"
},
"id": "myid",
"cells": [
{
"x": 0,
"y": 0,
"w": 2,
"h": 1,
"label": "Objects/Second",
"range": {
"upper": 100,
"lower": 10
},
"queries": ["/chronograf/v1/queries/1"]
},
{
"x": 2,
"y": 0,
"w": 2,
"h": 1,
"label": "Widgets/Second",
"range": {
"upper": 10,
"lower": 0
},
"queries": ["/chronograf/v1/queries/2"]
}
],
"name": "This is my dashboard",
}
{
"query": "SELECT mean(n_cpu) from cpu GROUP BY time(15m)",
"db": "telegraf",
"rp": "",
"links" : {
"self": "/chronograf/v1/queries/1"
}
}
Older chronograf dashboards had the following features:
- View Dashboard
- Add new visualization to dashboard
- Add existing visualization to dashboard
- Remove visualizatoin from dashboard
- Naming of dashboards
- Delete dashboard
- Edit visualization in dashboard
This API supports a user defined grid layout by specifying x
, y
, w
, h
.
These fields align with the react-grid-layout
methodology.
This layout style has:
- Draggable query cells
- Resizable query cells
- Vertical auto-packing
Returns a list of dashboards
{
"dashboards": [
{
"links": {
"self": "/chronograf/v1/dashboards/myid"
},
"id": "myid",
"cells": [
{
"x": 0,
"y": 0,
"w": 2,
"h": 1,
"label": "Objects/Second",
"range": {
"upper": 100,
"lower": 10
},
"queries": ["/chronograf/v1/queries/1"]
},
{
"x": 2,
"y": 0,
"w": 2,
"h": 1,
"label": "Widgets/Second",
"range": {
"upper": 10,
"lower": 0
},
"queries": ["/chronograf/v1/queries/2"]
}
],
"name": "This is my dashboard"
},
{
"links": {
"self": "/chronograf/v1/dashboards/myid"
},
"id": "myid",
"cells": [
{
"x": 0,
"y": 0,
"w": 2,
"h": 1,
"label": "Objects/Second",
"range": {
"upper": 100,
"lower": 10
},
"queries": ["/chronograf/v1/queries/1"]
},
{
"x": 2,
"y": 0,
"w": 2,
"h": 1,
"label": "Widgets/Second",
"range": {
"upper": 10,
"lower": 0
},
"queries": ["/chronograf/v1/queries/2"]
}
],
"name": "This is my dashboard"
}
]
}
Returns an single dashboard object. The fields x
, y
, w
, h
, default to
not existing unless a user has modified the particular cell.
{
"links": {
"self": "/chronograf/v1/dashboards/myid"
},
"id": "myid",
"cells": [
{
"x": 0,
"y": 0,
"w": 2,
"h": 1,
"label": "Objects/Second",
"range": {
"upper": 100,
"lower": 10
},
"queries": ["/chronograf/v1/queries/1"]
},
{
"x": 2,
"y": 0,
"w": 2,
"h": 1,
"label": "Widgets/Second",
"range": {
"upper": 10,
"lower": 0
},
"queries": ["/chronograf/v1/queries/2"]
}
],
"name": "This is my dashboard"
}
We want complete updates to the dashboards because we don't know if we can actually incrementally update visualization metadata
This endpoint will respond with the dashboard after update.
Removes a dashboard but will not remove the queries. This will lead to orphans.
Should we have a page that lists all the queries?
Creating a dashboard from an exploration would need to be a two-step process
- Create a query
- Create dashboard including query link
The queries endpoint will be a simple CRUD endpoint storing the raw query:
{
"query": "SELECT mean(n_cpu) from cpu GROUP BY time(15m)",
"db": "telegraf",
"rp": "",
"links" : {
"self": "/chronograf/v1/queries/1"
}
}
Over time I'd like this queries endpoint to support a format
parameter to return
the query data in different JSON formats such as QueryConfig
.