#!/usr/bin/env python3
import dash_core_components as dcc
import dash_html_components as html
import dash_bootstrap_components as dbc
from dash.dependencies import Input, Output
import plotly.io as pio
import plotly.graph_objects as go
import plotly.express as px
from app import app
from pages import satellites, total, machines, locations, vms, dozmod
# Array of all available Pages
pages = [
{'name': 'Satellites', 'link': '/', 'id': 'satellites', 'layout': satellites.layout},
{'name': 'Total', 'link': '/total', 'id': 'total', 'layout': total.layout},
{'name': 'Machines', 'link': '/machines', 'id': 'machines', 'layout': machines.layout},
{'name': 'Locations', 'link': '/locations', 'id': 'locations', 'layout': locations.layout},
{'name': 'VMs', 'link': '/vms', 'id': 'vms', 'layout': vms.layout},
{'name': 'Dozmod', 'link': '/dozmod', 'id': 'dozmod', 'layout': dozmod.layout},
]
# Set Graph Defaults
pio.templates['custom'] = dict(
layout=go.Layout(
title=dict(
x = 0.5,
xanchor = 'center',
yanchor = 'bottom',
font = dict(size = 25)
),
separators=',.',
yaxis_tickformat = ',0f',
colorway=px.colors.qualitative.D3
)
)
pio.templates.default = 'custom'
# Index Layout
app.layout = html.Div([
dcc.Location(id='url', refresh=False),
dbc.NavbarSimple(dark=True, color="dark", fluid=True, style={'marginBottom': '20px'}, children=[
dbc.NavItem(dbc.NavLink(page['name'], href=page['link'], id='nav-link-'+page['id'])) for page in pages
]),
html.Div(id='page-content')
])
# Expose Server for Deployment
server = app.server
# Set app title
app.title = 'bwLehrpool Stats'
@app.callback(Output('page-content', 'children'),
[Input('url', 'pathname')])
def display_page(pathname):
apps = {page['link']:page['layout'] for page in pages}
if pathname in apps:
if callable(apps[pathname]):
return apps[pathname]()
else:
return apps[pathname]
else:
return '404'
@app.callback(
[Output('nav-link-'+page['id'], "active") for page in pages],
[Input("url", "pathname")],
)
def toggle_active_links(pathname):
return [pathname == page['link'] for page in pages]
if __name__ == '__main__':
app.run_server(debug=True)