From 0c6d46777f5052337e8c9c183269c70159bfc14a Mon Sep 17 00:00:00 2001 From: YannC <37600690+Skraye@users.noreply.github.com> Date: Thu, 19 Jan 2023 22:12:30 +0100 Subject: [PATCH] feat(ui): add home dashboard (#910) Co-authored-by: Ludovic DEHON --- ui/package-lock.json | 18 ++ ui/package.json | 2 + ui/src/charts/MatrixChart.js | 5 + ui/src/charts/TreeMapChart.js | 5 + ui/src/components/flows/FlowRoot.vue | 15 +- ui/src/components/flows/Overview.vue | 25 ++ ui/src/components/home/Home.vue | 247 ++++++++++++++++++ ui/src/components/home/HomeDescription.vue | 35 +++ ui/src/components/home/HomeSummaryFailed.vue | 32 +++ ui/src/components/home/HomeSummaryLog.vue | 31 +++ .../components/home/HomeSummaryNamespace.vue | 66 +++++ ui/src/components/home/HomeSummaryPie.vue | 48 ++++ .../home/HomeSummaryStatusLabel.vue | 100 +++++++ ui/src/components/home/NamespaceTreeMap.vue | 156 +++++++++++ ui/src/components/home/StatusPie.vue | 103 ++++++++ ui/src/components/layout/DateRange.vue | 2 +- ui/src/override/components/LeftMenu.vue | 9 + ui/src/routes/routes.js | 3 +- ui/src/translations.json | 22 +- ui/src/utils/init.js | 28 +- 20 files changed, 945 insertions(+), 7 deletions(-) create mode 100644 ui/src/charts/MatrixChart.js create mode 100644 ui/src/charts/TreeMapChart.js create mode 100644 ui/src/components/flows/Overview.vue create mode 100644 ui/src/components/home/Home.vue create mode 100644 ui/src/components/home/HomeDescription.vue create mode 100644 ui/src/components/home/HomeSummaryFailed.vue create mode 100644 ui/src/components/home/HomeSummaryLog.vue create mode 100644 ui/src/components/home/HomeSummaryNamespace.vue create mode 100644 ui/src/components/home/HomeSummaryPie.vue create mode 100644 ui/src/components/home/HomeSummaryStatusLabel.vue create mode 100644 ui/src/components/home/NamespaceTreeMap.vue create mode 100644 ui/src/components/home/StatusPie.vue diff --git a/ui/package-lock.json b/ui/package-lock.json index d9e8aa6806d..7832e02a54b 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -15,6 +15,8 @@ "bootstrap": "^5.2.3", "buffer": "^6.0.3", "chart.js": "^4.1.2", + "chartjs-chart-matrix": "^1.3.0", + "chartjs-chart-treemap": "^2.2.0", "core-js": "^3.27.0", "cron-parser": "^4.7.0", "cron-validator": "^1.3.1", @@ -1202,6 +1204,22 @@ "pnpm": "^7.0.0" } }, + "node_modules/chartjs-chart-matrix": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/chartjs-chart-matrix/-/chartjs-chart-matrix-1.3.0.tgz", + "integrity": "sha512-oPmyxY60tJDBFbnhXcmcJujs+F1a2uMvb9HOhSeV2/5k8L9LApWtyRJzwNWawMl8vDbWdhAfobq06b4AcdwE3Q==", + "peerDependencies": { + "chart.js": ">=3.0.0" + } + }, + "node_modules/chartjs-chart-treemap": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/chartjs-chart-treemap/-/chartjs-chart-treemap-2.2.0.tgz", + "integrity": "sha512-SfOHPIPmJb7u1EZAap3lAHcqQIc5jmcd+N4NW8WJHiDPG8oXP9dYR9KrNHPn7CgZIfyU4oRmIF3oqAi3QWO8ug==", + "peerDependencies": { + "chart.js": ">=3.0.0" + } + }, "node_modules/check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", diff --git a/ui/package.json b/ui/package.json index 6c91d9d6329..8a884b358cc 100644 --- a/ui/package.json +++ b/ui/package.json @@ -17,6 +17,8 @@ "bootstrap": "^5.2.3", "buffer": "^6.0.3", "chart.js": "^4.1.2", + "chartjs-chart-matrix": "^1.3.0", + "chartjs-chart-treemap": "^2.2.0", "core-js": "^3.27.0", "cron-parser": "^4.7.0", "cron-validator": "^1.3.1", diff --git a/ui/src/charts/MatrixChart.js b/ui/src/charts/MatrixChart.js new file mode 100644 index 00000000000..0d88ce4449f --- /dev/null +++ b/ui/src/charts/MatrixChart.js @@ -0,0 +1,5 @@ +import {defineChartComponent} from "vue-chart-3"; + +const MatrixChart = defineChartComponent("MatrixChart", "matrix"); + +export default MatrixChart; \ No newline at end of file diff --git a/ui/src/charts/TreeMapChart.js b/ui/src/charts/TreeMapChart.js new file mode 100644 index 00000000000..3d0fddc183e --- /dev/null +++ b/ui/src/charts/TreeMapChart.js @@ -0,0 +1,5 @@ +import {defineChartComponent} from "vue-chart-3"; + +const TreeMapChart = defineChartComponent("TreeMapChart", "treemap"); + +export default TreeMapChart; \ No newline at end of file diff --git a/ui/src/components/flows/FlowRoot.vue b/ui/src/components/flows/FlowRoot.vue index f3d0e6a38bd..a05da1ded4d 100644 --- a/ui/src/components/flows/FlowRoot.vue +++ b/ui/src/components/flows/FlowRoot.vue @@ -27,6 +27,7 @@ import Tabs from "../Tabs.vue"; import BottomLine from "../../components/layout/BottomLine.vue"; import TriggerFlow from "../../components/flows/TriggerFlow.vue"; + import Overview from "./Overview.vue"; export default { mixins: [RouteContext], @@ -68,7 +69,7 @@ return this.$route.params.namespace + "/" + this.$route.params.id; }, getTabs() { - const tabs = [ + let tabs = [ { name: undefined, component: Topology, @@ -76,6 +77,18 @@ }, ]; + if (this.user.hasAny(permission.EXECUTION)) { + tabs[0].name = "topology"; + + tabs = [ + { + name: undefined, + component: Overview, + title: this.$t("overview"), + }, + ].concat(tabs) + } + if (this.user && this.flow && this.user.isAllowed(permission.EXECUTION, action.READ, this.flow.namespace)) { tabs.push({ name: "executions", diff --git a/ui/src/components/flows/Overview.vue b/ui/src/components/flows/Overview.vue new file mode 100644 index 00000000000..930d9513cac --- /dev/null +++ b/ui/src/components/flows/Overview.vue @@ -0,0 +1,25 @@ + + + \ No newline at end of file diff --git a/ui/src/components/home/Home.vue b/ui/src/components/home/Home.vue new file mode 100644 index 00000000000..11adbcf020a --- /dev/null +++ b/ui/src/components/home/Home.vue @@ -0,0 +1,247 @@ + + + + diff --git a/ui/src/components/home/HomeDescription.vue b/ui/src/components/home/HomeDescription.vue new file mode 100644 index 00000000000..fff83841e86 --- /dev/null +++ b/ui/src/components/home/HomeDescription.vue @@ -0,0 +1,35 @@ + + + + \ No newline at end of file diff --git a/ui/src/components/home/HomeSummaryFailed.vue b/ui/src/components/home/HomeSummaryFailed.vue new file mode 100644 index 00000000000..618d75c817a --- /dev/null +++ b/ui/src/components/home/HomeSummaryFailed.vue @@ -0,0 +1,32 @@ + + diff --git a/ui/src/components/home/HomeSummaryLog.vue b/ui/src/components/home/HomeSummaryLog.vue new file mode 100644 index 00000000000..43a9dbc3d04 --- /dev/null +++ b/ui/src/components/home/HomeSummaryLog.vue @@ -0,0 +1,31 @@ + + diff --git a/ui/src/components/home/HomeSummaryNamespace.vue b/ui/src/components/home/HomeSummaryNamespace.vue new file mode 100644 index 00000000000..15200d16a04 --- /dev/null +++ b/ui/src/components/home/HomeSummaryNamespace.vue @@ -0,0 +1,66 @@ + + + + \ No newline at end of file diff --git a/ui/src/components/home/HomeSummaryPie.vue b/ui/src/components/home/HomeSummaryPie.vue new file mode 100644 index 00000000000..301333f84e3 --- /dev/null +++ b/ui/src/components/home/HomeSummaryPie.vue @@ -0,0 +1,48 @@ + + + diff --git a/ui/src/components/home/HomeSummaryStatusLabel.vue b/ui/src/components/home/HomeSummaryStatusLabel.vue new file mode 100644 index 00000000000..38c2367a59e --- /dev/null +++ b/ui/src/components/home/HomeSummaryStatusLabel.vue @@ -0,0 +1,100 @@ + + + + + diff --git a/ui/src/components/home/NamespaceTreeMap.vue b/ui/src/components/home/NamespaceTreeMap.vue new file mode 100644 index 00000000000..27d370bfca4 --- /dev/null +++ b/ui/src/components/home/NamespaceTreeMap.vue @@ -0,0 +1,156 @@ + + + + + \ No newline at end of file diff --git a/ui/src/components/home/StatusPie.vue b/ui/src/components/home/StatusPie.vue new file mode 100644 index 00000000000..0c2fc16d408 --- /dev/null +++ b/ui/src/components/home/StatusPie.vue @@ -0,0 +1,103 @@ + + + + + \ No newline at end of file diff --git a/ui/src/components/layout/DateRange.vue b/ui/src/components/layout/DateRange.vue index a2708978388..ff2aef399b3 100644 --- a/ui/src/components/layout/DateRange.vue +++ b/ui/src/components/layout/DateRange.vue @@ -1,6 +1,6 @@