From bf4bc214b284e3ae0492899d9d84fc7cf9c88f97 Mon Sep 17 00:00:00 2001 From: vineethvk11 Date: Sat, 6 Apr 2024 13:03:09 +0530 Subject: [PATCH] Implementing HostDiskUsageService removing diskusage dependency --- package-lock.json | 19 +----- package.json | 1 - .../backend/src/LocalDiskStorageModule.js | 3 + packages/backend/src/config.js | 11 +--- .../src/services/HostDiskUsageService.js | 66 +++++++++++++++++++ 5 files changed, 73 insertions(+), 27 deletions(-) create mode 100644 packages/backend/src/services/HostDiskUsageService.js diff --git a/package-lock.json b/package-lock.json index 1b557743..0b1c2824 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,6 @@ "packages/*" ], "dependencies": { - "diskusage": "^1.2.0", "uuid": "^9.0.1" }, "devDependencies": { @@ -5245,16 +5244,6 @@ "md5": "^2.3.0" } }, - "node_modules/diskusage": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/diskusage/-/diskusage-1.2.0.tgz", - "integrity": "sha512-2u3OG3xuf5MFyzc4MctNRUKjjwK+UkovRYdD2ed/NZNZPrt0lqHnLKxGhlFVvAb4/oufIgQG3nWgwmeTbHOvXA==", - "hasInstallScript": true, - "dependencies": { - "es6-promise": "^4.2.8", - "nan": "^2.18.0" - } - }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -5492,11 +5481,6 @@ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, "node_modules/escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", @@ -7905,7 +7889,8 @@ "node_modules/nan": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz", - "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==" + "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==", + "optional": true }, "node_modules/napi-build-utils": { "version": "1.0.2", diff --git a/package.json b/package.json index 6485976a..0fd73122 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,6 @@ ] }, "dependencies": { - "diskusage": "^1.2.0", "uuid": "^9.0.1" } } diff --git a/packages/backend/src/LocalDiskStorageModule.js b/packages/backend/src/LocalDiskStorageModule.js index 763d7f95..26935e4c 100644 --- a/packages/backend/src/LocalDiskStorageModule.js +++ b/packages/backend/src/LocalDiskStorageModule.js @@ -23,6 +23,9 @@ class LocalDiskStorageModule extends AdvancedBase { const services = context.get('services'); const LocalDiskStorageService = require("./services/LocalDiskStorageService"); services.registerService('local-disk-storage', LocalDiskStorageService); + + const HostDiskUsageService = require('./services/HostDiskUsageService'); + services.registerService('host-disk-usage', HostDiskUsageService); } } diff --git a/packages/backend/src/config.js b/packages/backend/src/config.js index cecd3a89..3a68a82b 100644 --- a/packages/backend/src/config.js +++ b/packages/backend/src/config.js @@ -19,7 +19,6 @@ "use strict" const deep_proto_merge = require('./config/deep_proto_merge'); // const reserved_words = require('./config/reserved_words'); -const diskusage = require('diskusage'); let config = {}; @@ -55,15 +54,9 @@ config.storage_capacity = 1*1024*1024*1024; config.static_hosting_domain = '-static.puter.local'; // Storage limiting is set to false by default -// Storage available on the device puter is running is the storage available +// Storage available on the mountpoint/drive puter is running is the storage available config.is_storage_limited = false; -diskusage.check('/', (err, info) => { - if (err) { - config.available_device_storage = 1*1024*1024*1024; - } else{ - config.available_device_storage = info.free; - } -}); +config.available_device_storage = null; config.thumb_width = 80; config.thumb_height = 80; diff --git a/packages/backend/src/services/HostDiskUsageService.js b/packages/backend/src/services/HostDiskUsageService.js new file mode 100644 index 00000000..d8ade2c2 --- /dev/null +++ b/packages/backend/src/services/HostDiskUsageService.js @@ -0,0 +1,66 @@ +const { BaseService } = require("../../exports"); +const { execSync } = require('child_process'); +const config = require("../config"); + +class HostDiskUsageService extends BaseService { + static DESCRIPTION = ` + This service is responsible for identifying the mountpoint/drive + on which the current process working directory is running, and then checking the + disk usage of that mountpoint/drive. + `; + + async _init() { + const current_platform = process.platform; + + // Setting the available space to a large number for unhandled platforms + var free_space = 1e+14; + + if (current_platform == "darwin") { + const mountpoint = this.get_darwin_mountpoint(process.cwd()); + free_space = this.get_disk_capacity_darwin(mountpoint); + } else if (current_platform == "linux") { + this.log.warn('HostDiskUsageService: Linux is not supported yet'); + // TODO: Implement for linux systems + } else if (current_platform == "win32") { + this.log.warn('HostDiskUsageService: Windows is not supported yet'); + // TODO: Implement for windows systems + } + + console.log('free_space:', free_space); + config.available_device_storage = free_space; + } + + + // Get the mountpoint/drive of the current working directory in mac os + get_darwin_mountpoint(directory) { + return execSync(`df -P "${directory}" | awk 'NR==2 {print $6}'`, { encoding: 'utf-8' }).trim(); + } + + // Get the mountpoint/drive of the current working directory in linux + get_linux_mountpint(directory) { + // TODO: Implement for linux systems + } + + // Get the drive of the current working directory in windows + get_windows_drive(directory) { + // TODO: Implement for windows systems + } + + // Get the free space on the mountpoint/drive in mac os + get_disk_capacity_darwin(mountpoint) { + const disk_info = execSync(`df -P "${mountpoint}" | awk 'NR==2 {print $4}'`, { encoding: 'utf-8' }).trim().split(' '); + return parseInt(disk_info) * 512; + } + + // Get the free space on the mountpoint/drive in linux + get_disk_capacity_linux(mountpoint) { + // TODO: Implement for linux systems + } + + // Get the free space on the drive in windows + get_disk_capacity_windows(drive) { + // TODO: Implement for windows systems + } +} + +module.exports = HostDiskUsageService;