From 99f30fe09a70d9727ddca1eb42a87e4dcd348bd8 Mon Sep 17 00:00:00 2001 From: Johannes Zellner Date: Mon, 17 Feb 2025 16:38:30 +0100 Subject: [PATCH] Add diskusage to systems view again --- dashboard/src/components/DiskUsage.vue | 255 ++++++++++++++++++++++ dashboard/src/components/ExternalLdap.vue | 2 +- dashboard/src/models/SystemModel.js | 22 ++ dashboard/src/models/VolumesModel.js | 12 +- dashboard/src/views/SystemView.vue | 5 +- dashboard/src/views/VolumesView.vue | 6 +- 6 files changed, 290 insertions(+), 12 deletions(-) create mode 100644 dashboard/src/components/DiskUsage.vue diff --git a/dashboard/src/components/DiskUsage.vue b/dashboard/src/components/DiskUsage.vue new file mode 100644 index 000000000..834a615d0 --- /dev/null +++ b/dashboard/src/components/DiskUsage.vue @@ -0,0 +1,255 @@ + + + + + diff --git a/dashboard/src/components/ExternalLdap.vue b/dashboard/src/components/ExternalLdap.vue index 9b42cfee4..c17d24e73 100644 --- a/dashboard/src/components/ExternalLdap.vue +++ b/dashboard/src/components/ExternalLdap.vue @@ -186,7 +186,7 @@ async function updateTaskStatus(id) { syncPercent.value = result.percent; syncMessage.value = result.message; - setTimeout(updateTaskStatus.bind(null, id), 500); + setTimeout(updateTaskStatus.bind(null, id), 2000); } async function refreshTasks() { diff --git a/dashboard/src/models/SystemModel.js b/dashboard/src/models/SystemModel.js index a1800cd5a..9d2987b03 100644 --- a/dashboard/src/models/SystemModel.js +++ b/dashboard/src/models/SystemModel.js @@ -61,6 +61,28 @@ function create() { if (error || result.status !== 202) return [error || result]; return [null]; }, + async diskUsage() { + let error, result; + try { + result = await fetcher.get(`${origin}/api/v1/system/disk_usage`, { access_token: accessToken }); + } catch (e) { + error = e; + } + + if (error || result.status !== 200) return [error || result]; + return [null, result.body.usage]; + }, + async rescanDiskUsage() { + let error, result; + try { + result = await fetcher.post(`${origin}/api/v1/system/disk_usage`, {}, { access_token: accessToken }); + } catch (e) { + error = e; + } + + if (error || result.status !== 201) return [error || result]; + return [null, result.body.taskId]; + }, }; } diff --git a/dashboard/src/models/VolumesModel.js b/dashboard/src/models/VolumesModel.js index 78fa1b00d..7ef3b2dbc 100644 --- a/dashboard/src/models/VolumesModel.js +++ b/dashboard/src/models/VolumesModel.js @@ -6,21 +6,17 @@ function create() { const origin = import.meta.env.VITE_API_ORIGIN || window.location.origin; return { - name: 'VolumesModel', async list() { - let error, result; + let result; try { result = await fetcher.get(`${origin}/api/v1/volumes`, { access_token: accessToken }); } catch (e) { - error = e; + return [e]; } - if (error || result.status !== 200) { - console.error('Failed to list volumes.', error, result); - return []; - } + if (result.status !== 200) return [result]; - return result.body.volumes; + return [null, result.body.volumes]; }, async getStatus(id) { let error, result; diff --git a/dashboard/src/views/SystemView.vue b/dashboard/src/views/SystemView.vue index 28219869b..e8dd84ffb 100644 --- a/dashboard/src/views/SystemView.vue +++ b/dashboard/src/views/SystemView.vue @@ -5,6 +5,7 @@ import { Button } from 'pankow'; import moment from 'moment'; import { prettyDecimalSize } from 'pankow/utils'; import Section from '../components/Section.vue'; +import DiskUsage from '../components/DiskUsage.vue'; import SystemModel from '../models/SystemModel.js'; import DashboardModel from '../models/DashboardModel.js'; @@ -41,7 +42,6 @@ onMounted(async () => { [error, result] = await dashboardModel.getConfig(); if (error) return console.error(error); config.value = result; - }); @@ -82,7 +82,8 @@ onMounted(async () => {
{{ $t('system.info.activationTime') }}
{{ activeSince }}
- + + diff --git a/dashboard/src/views/VolumesView.vue b/dashboard/src/views/VolumesView.vue index 22132a82e..dd393919e 100644 --- a/dashboard/src/views/VolumesView.vue +++ b/dashboard/src/views/VolumesView.vue @@ -83,7 +83,11 @@ const volumeDialogValid = computed(() => { async function refresh() { busy.value = true; - volumes.value = await volumesModel.list(); + + const [error, result] = await volumesModel.list(); + if (error) return console.error(error); + volumes.value = result; + busy.value = false; for (const v of volumes.value) {