Report: Configure rls report
[csit.git] / resources / tools / dash / app / pal / report / report.py
1 # Copyright (c) 2022 Cisco and/or its affiliates.
2 # Licensed under the Apache License, Version 2.0 (the "License");
3 # you may not use this file except in compliance with the License.
4 # You may obtain a copy of the License at:
5 #
6 #     http://www.apache.org/licenses/LICENSE-2.0
7 #
8 # Unless required by applicable law or agreed to in writing, software
9 # distributed under the License is distributed on an "AS IS" BASIS,
10 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 # See the License for the specific language governing permissions and
12 # limitations under the License.
13
14 """Instantiate the Report Dash application.
15 """
16
17 import dash
18 from dash import dcc
19 from dash import html
20 from dash import dash_table
21 import numpy as np
22 import pandas as pd
23
24 from .data import create_dataframe
25 from .layout import html_layout
26
27
28 def init_report(server):
29     """Create a Plotly Dash dashboard.
30
31     :param server: Flask server.
32     :type server: Flask
33     :returns: Dash app server.
34     :rtype: Dash
35     """
36
37     dash_app = dash.Dash(
38         server=server,
39         routes_pathname_prefix=u"/report/",
40         external_stylesheets=[
41             u"/static/dist/css/styles.css",
42             u"https://fonts.googleapis.com/css?family=Lato",
43         ],
44     )
45
46     # Load DataFrame
47     df = create_dataframe()
48
49     # Custom HTML layout
50     dash_app.index_string = html_layout
51
52     # Create Layout
53     dash_app.layout = html.Div(
54         children=[
55             create_data_table(df),
56         ],
57         id=u"dash-container",
58     )
59     return dash_app.server
60
61
62 def create_data_table(df):
63     """Create Dash datatable from Pandas DataFrame.
64
65     DEMO
66     """
67
68     table = dash_table.DataTable(
69         id=u"database-table",
70         columns=[{u"name": i, u"id": i} for i in df.columns],
71         data=df.to_dict(u"records"),
72         sort_action=u"native",
73         sort_mode=u"native",
74         page_size=5,
75     )
76     return table