C-Dash: Add hyperlinks to job/builds
[csit.git] / csit.infra.dash / app / cdash / report / layout.py
index ec17dec..fcea2ab 100644 (file)
@@ -293,6 +293,18 @@ class Layout:
                             ]
                         ),
                         delay_show=C.SPINNER_DELAY
+                    ),
+                    dbc.Offcanvas(
+                        class_name="w-75",
+                        id="offcanvas-documentation",
+                        title="Documentation",
+                        placement="end",
+                        is_open=False,
+                        children=html.Iframe(
+                            src=C.URL_DOC_REL_NOTES,
+                            width="100%",
+                            height="100%"
+                        )
                     )
                 ]
             )
@@ -318,14 +330,26 @@ class Layout:
         return dbc.NavbarSimple(
             id="navbarsimple-main",
             children=[
-                dbc.NavItem(
-                    dbc.NavLink(
-                        C.REPORT_TITLE,
-                        disabled=True,
-                        external_link=True,
-                        href="#"
-                    )
-                )
+                dbc.NavItem(dbc.NavLink(
+                    C.REPORT_TITLE,
+                    active=True,
+                    external_link=True,
+                    href="/report"
+                )),
+                dbc.NavItem(dbc.NavLink(
+                    "Comparisons",
+                    external_link=True,
+                    href="/comparisons"
+                )),
+                dbc.NavItem(dbc.NavLink(
+                    "Coverage Data",
+                    external_link=True,
+                    href="/coverage"
+                )),
+                dbc.NavItem(dbc.NavLink(
+                    "Documentation",
+                    id="btn-documentation",
+                ))
             ],
             brand=C.BRAND,
             brand_href="/",
@@ -1398,22 +1422,34 @@ class Layout:
                 if len(graph_data) == 1:
                     hdrh_data = graph_data[0].get("customdata", None)
                     if hdrh_data:
+                        name = hdrh_data.pop("name")
                         graph = [dbc.Card(
                             class_name="gy-2 p-0",
                             children=[
-                                dbc.CardHeader(hdrh_data.pop("name")),
-                                dbc.CardBody(children=[
-                                    dcc.Graph(
-                                        id="hdrh-latency-graph",
-                                        figure=graph_hdrh_latency(
-                                            hdrh_data, self._graph_layout
-                                        )
+                                dbc.CardHeader(html.A(
+                                    name,
+                                    href=f"{C.URL_JENKINS}{name}",
+                                    target="_blank"
+                                )),
+                                dbc.CardBody(dcc.Graph(
+                                    id="hdrh-latency-graph",
+                                    figure=graph_hdrh_latency(
+                                        hdrh_data, self._graph_layout
                                     )
-                                ])
+                                ))
                             ])
                         ]
             else:
                 raise PreventUpdate
+            list_group_items = list()
+            for k, v in _process_stats(graph_data, trigger.idx):
+                list_group_items.append(dbc.ListGroupItem([dbc.Badge(k), v]))
+            if trigger.idx == "tput" and len(list_group_items) == 1:
+                job = graph_data[0].get("customdata", "")
+                list_group_items.append(dbc.ListGroupItem([
+                    dbc.Badge("csit-ref"),
+                    html.A(job, href=f"{C.URL_JENKINS}{job}", target="_blank")
+                ]))
             metadata = [
                 dbc.Card(
                     class_name="gy-2 p-0",
@@ -1427,19 +1463,22 @@ class Layout:
                             title
                         ]),
                         dbc.CardBody(
+                            dbc.ListGroup(list_group_items, flush=True),
                             id="tput-lat-metadata",
-                            class_name="p-0",
-                            children=[dbc.ListGroup(
-                                [
-                                    dbc.ListGroupItem([dbc.Badge(k), v])
-                                        for k, v in _process_stats(
-                                            graph_data, trigger.idx)
-                                ],
-                                flush=True)
-                            ]
+                            class_name="p-0"
                         )
                     ]
                 )
             ]
 
             return metadata, graph, True
+
+        @app.callback(
+            Output("offcanvas-documentation", "is_open"),
+            Input("btn-documentation", "n_clicks"),
+            State("offcanvas-documentation", "is_open")
+        )
+        def toggle_offcanvas_documentation(n_clicks, is_open):
+            if n_clicks:
+                return not is_open
+            return is_open