Skip to content

Commit 285278f

Browse files
committed
feat(FileSystem): disk space alert below 20% or 1Gb
Signed-off-by: Pedro Lamas <[email protected]>
1 parent 770899b commit 285278f

File tree

5 files changed

+30
-24
lines changed

5 files changed

+30
-24
lines changed

src/components/widgets/filesystem/FileSystemToolbar.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ export default class FileSystemToolbar extends Mixins(StatesMixin) {
209209
}
210210
211211
get lowOnSpace (): boolean {
212-
return this.$typedGetters['files/getLowOnSpace'](this.root)
212+
return this.$typedGetters['files/getDiskUsage'](this.root)?.lowOnSpace ?? false
213213
}
214214
215215
// Properties of the current root.

src/components/widgets/system/DiskUsageCard.vue

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@
5050
<v-progress-linear
5151
:size="90"
5252
:height="10"
53-
:value="fileSystemUsedPercent"
54-
color="primary"
53+
:value="diskUsage?.usedPercent"
54+
:color="diskUsage?.lowOnSpace ? 'error': 'primary'"
5555
class="my-1"
5656
/>
5757

@@ -83,7 +83,7 @@
8383

8484
<script lang="ts">
8585
import { Component, Mixins } from 'vue-property-decorator'
86-
import type { DiskUsage } from '@/store/files/types'
86+
import type { AppDiskUsage } from '@/store/files/types'
8787
import { SocketActions } from '@/api/socketActions'
8888
import StateMixin from '@/mixins/state'
8989
@@ -105,9 +105,9 @@ export default class DiskUsageCard extends Mixins(StateMixin) {
105105
return this.hasWait(`${this.$waits.onFileSystem}/${this.currentRoot}/`)
106106
}
107107
108-
get diskUsage (): DiskUsage | undefined {
108+
get diskUsage (): AppDiskUsage | undefined {
109109
if (this.currentRoot != null) {
110-
const diskUsage: DiskUsage | undefined = this.$typedState.files.diskUsage[this.currentRoot]
110+
const diskUsage: AppDiskUsage | undefined = this.$typedGetters['files/getDiskUsage'](this.currentRoot)
111111
112112
if (diskUsage == null) {
113113
SocketActions.serverFilesGetDirectory(this.currentRoot)
@@ -117,12 +117,6 @@ export default class DiskUsageCard extends Mixins(StateMixin) {
117117
}
118118
}
119119
120-
get fileSystemUsedPercent (): number {
121-
return this.diskUsage == null
122-
? 0
123-
: Math.floor((this.diskUsage.used / this.diskUsage.total) * 100)
124-
}
125-
126120
handleRefresh () {
127121
if (this.currentRoot != null) {
128122
SocketActions.serverFilesGetDirectory(this.currentRoot)

src/store/files/getters.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Vue from 'vue'
22
import type { GetterTree } from 'vuex'
3-
import type { AppDirectory, AppFile, AppFileMeta, AppFileWithMeta, FileBrowserEntry, FilesState, MoonrakerFile, MoonrakerFileWithMeta, RootProperties } from './types'
3+
import type { AppDirectory, AppDiskUsage, AppFile, AppFileMeta, AppFileWithMeta, FileBrowserEntry, FilesState, MoonrakerFile, MoonrakerFileWithMeta, RootProperties } from './types'
44
import type { RootState } from '../types'
55
import type { HistoryItem } from '../history/types'
66
import { SupportedImageFormats, SupportedMarkdownFormats, SupportedVideoFormats } from '@/globals'
@@ -227,12 +227,19 @@ export const getters = {
227227
return state.currentPaths[root] ?? ''
228228
},
229229

230-
/**
231-
* Returns a boolean indicating if we're low on disk space.
232-
*/
233-
getLowOnSpace: (state) => (root: string) => {
230+
getDiskUsage: (state) => (root: string): AppDiskUsage | undefined => {
234231
const diskUsage = state.diskUsage[root]
235-
// 1073741824 = 1gb
236-
return diskUsage != null && diskUsage.free < 1073741824
232+
233+
if (diskUsage != null) {
234+
// 1073741824 = 1gb
235+
const lowOnSpace = diskUsage.free < Math.min(1073741824, diskUsage.total * 0.2)
236+
const usedPercent = Math.floor((diskUsage.used / diskUsage.total) * 100)
237+
238+
return {
239+
...diskUsage,
240+
usedPercent,
241+
lowOnSpace
242+
}
243+
}
237244
}
238245
} satisfies GetterTree<FilesState, RootState>

src/store/files/mutations.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Vue from 'vue'
22
import type { MutationTree } from 'vuex'
3-
import type { FilesState, MoonrakerRootFile, MoonrakerPathContent, MoonrakerFile, MoonrakerFileWithMeta, FilePaths, MoonrakerDir, DiskUsage } from './types'
3+
import type { FilesState, MoonrakerRootFile, MoonrakerPathContent, MoonrakerFile, MoonrakerFileWithMeta, FilePaths, MoonrakerDir, MoonrakerDiskUsage } from './types'
44
import { defaultState } from './state'
55
import { Globals } from '@/globals'
66

@@ -171,7 +171,7 @@ export const mutations = {
171171
Vue.set(state.currentPaths, payload.root, payload.path)
172172
},
173173

174-
setDiskUsage (state, payload: { root: string, disk_usage: DiskUsage }) {
174+
setDiskUsage (state, payload: { root: string, disk_usage: MoonrakerDiskUsage }) {
175175
Vue.set(state.diskUsage, payload.root, payload.disk_usage)
176176
}
177177
} satisfies MutationTree<FilesState>

src/store/files/types.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,22 @@ export interface FilesState {
77
uploads: FileUpload[];
88
download: FileDownload | null;
99
currentPaths: Record<string, string>;
10-
diskUsage: Record<string, DiskUsage | undefined>;
10+
diskUsage: Record<string, MoonrakerDiskUsage | undefined>;
1111
rootFiles: Record<string, MoonrakerRootFile[] | undefined>;
1212
pathContent: Record<string, MoonrakerPathContent | undefined>;
1313
}
1414

15-
export interface DiskUsage {
15+
export interface MoonrakerDiskUsage {
1616
total: number;
1717
used: number;
1818
free: number;
1919
}
2020

21+
export interface AppDiskUsage extends MoonrakerDiskUsage {
22+
usedPercent: number;
23+
lowOnSpace: boolean;
24+
}
25+
2126
export interface MoonrakerRootFile {
2227
path: string;
2328
modified: number;
@@ -79,7 +84,7 @@ export interface AppDirectory extends MoonrakerDir {
7984
export interface DirectoryInformation {
8085
dirs: MoonrakerDir[];
8186
files: (MoonrakerFile | MoonrakerFileWithMeta)[];
82-
disk_usage: DiskUsage;
87+
disk_usage: MoonrakerDiskUsage;
8388
root_info: RootInfo;
8489
}
8590

0 commit comments

Comments
 (0)