We have been using Grafana for some dashboards. One nice feature of Grafana is the ability to define dashboard ‘playlists’, which consist of a series of dashboards that rotate on a timer.
Below is a basic recipe for creating rotating layouts (dashboard or otherwise) using Dash (feedback and improvements are welcome):
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
seconds_per_layout = 5
app = dash.Dash()
app.layout = html.Div(children=[
dcc.Interval(
id='interval-component',
interval=seconds_per_layout * 1000, # in milliseconds
n_intervals=0
),
html.Div(id='layout-container'),
])
layout_a = html.Div(children=[
html.H1('Layout A')
])
layout_b = html.Div(children=[
html.H1('Layout B')
])
layout_c = html.Div(children=[
html.H1('Layout C')
])
layout_playlist = [
layout_a,
layout_b,
layout_c,
]
@app.callback(
Output('layout-container', 'children'),
[
Input('interval-component', 'n_intervals'),
]
)
def layout_playlist_update(n_intervals):
# Get layout index
current_layout_index = n_intervals % len(layout_playlist)
# Return layout
return layout_playlist[current_layout_index]
if __name__ == '__main__':
app.run_server(debug=True, host='0.0.0.0')