feat(uti): Data source
[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
22 from .data import read_stats
23 from .data import read_trending_mrr, read_trending_ndrpdr
24 from .data import read_iterative_mrr, read_iterative_ndrpdr
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     # Custom HTML layout
47     dash_app.index_string = html_layout
48
49     # Create Layout
50     dash_app.layout = html.Div(
51         children=[
52             html.Div(
53                 children=create_data_table(
54                     read_stats().dropna(),
55                     u"database-table-stats"
56                 )
57             ),
58             html.Div(
59                 children=create_data_table(
60                     read_trending_mrr().dropna(),
61                     u"database-table-mrr"
62                 )
63             ),
64             html.Div(
65                 children=create_data_table(
66                     read_trending_ndrpdr().dropna(),
67                     u"database-table-ndrpdr"
68                 )
69             ),
70             html.Div(
71                 children=create_data_table(
72                     read_iterative_mrr().dropna(),
73                     u"database-table-iterative-mrr"
74                 )
75             ),
76             html.Div(
77                 children=create_data_table(
78                     read_iterative_ndrpdr().dropna(),
79                     u"database-table-iterative-ndrpdr"
80                 )
81             )
82         ],
83         id=u"dash-container",
84     )
85     return dash_app.server
86
87
88 def create_data_table(df, id):
89     """Create Dash datatable from Pandas DataFrame.
90
91     DEMO
92     """
93
94     table = dash_table.DataTable(
95         id=id,
96         columns=[{u"name": i, u"id": i} for i in df.columns],
97         data=df.to_dict(u"records"),
98         fixed_rows={'headers': True},
99         sort_action=u"native",
100         sort_mode=u"native",
101         page_size=5,
102         style_header={
103             'overflow': 'hidden',
104             'textOverflow': 'ellipsis',
105             'minWidth': 95, 'maxWidth': 95, 'width': 95,
106         }
107     )
108     return table