volumes: collect du data

part of #756
This commit is contained in:
Girish Ramakrishnan
2021-01-04 11:05:42 -08:00
parent 370485eee6
commit ead832ac73
3 changed files with 96 additions and 41 deletions
+75 -39
View File
@@ -1,9 +1,9 @@
'use strict';
exports = module.exports = {
getDisks: getDisks,
checkDiskSpace: checkDiskSpace,
getMemory: getMemory
getDisks,
checkDiskSpace,
getMemory
};
const apps = require('./apps.js'),
@@ -17,13 +17,74 @@ const apps = require('./apps.js'),
os = require('os'),
paths = require('./paths.js'),
safe = require('safetydance'),
settings = require('./settings.js');
settings = require('./settings.js'),
volumes = require('./volumes.js');
const dfAsync = async.asyncify(df), dfFileAsync = async.asyncify(df.file);
function getVolumeDisks(callback) {
assert.strictEqual(typeof callback, 'function');
let volumeDisks = {};
volumes.list(function (error, allVolumes) {
if (error) return callback(error);
async.eachSeries(allVolumes, function (volume, iteratorDone) {
dfFileAsync(volume.hostPath, function (error, result) {
volumeDisks[volume.id] = error ? volumeDisks.appsDataDisk : result.filesystem; // ignore any errors
iteratorDone();
});
}, function (error) {
callback(error, volumeDisks);
});
});
}
function getAppDisks(callback) {
assert.strictEqual(typeof callback, 'function');
let appDisks = {};
apps.getAll(function (error, allApps) {
if (error) return callback(error);
async.eachSeries(allApps, function (app, iteratorDone) {
if (!app.dataDir) {
appDisks[app.id] = appDisks.appsDataDisk;
return iteratorDone();
}
dfFileAsync(app.dataDir, function (error, result) {
appDisks[app.id] = error ? appDisks.appsDataDisk : result.filesystem; // ignore any errors
iteratorDone();
});
}, function (error) {
callback(error, appDisks);
});
});
}
function getBackupDisk(callback) {
assert.strictEqual(typeof callback, 'function');
settings.getBackupConfig(function (error, backupConfig) {
if (error) return callback(error);
if (backupConfig.provider !== 'filesystem') return callback(null, null);
dfFileAsync(backupConfig.backupFolder, function (error, result) {
if (error) return callback(error);
callback(null, result.filesystem);
});
});
}
function getDisks(callback) {
assert.strictEqual(typeof callback, 'function');
const dfAsync = async.asyncify(df), dfFileAsync = async.asyncify(df.file);
docker.info(function (error, info) {
if (error) return callback(error);
@@ -32,7 +93,10 @@ function getDisks(callback) {
dfFileAsync.bind(null, paths.BOX_DATA_DIR),
dfFileAsync.bind(null, paths.PLATFORM_DATA_DIR),
dfFileAsync.bind(null, paths.APPS_DATA_DIR),
dfFileAsync.bind(null, info.DockerRootDir)
dfFileAsync.bind(null, info.DockerRootDir),
getBackupDisk,
getAppDisks,
getVolumeDisks,
], function (error, values) {
if (error) return callback(new BoxError(BoxError.FS_ERROR, error));
@@ -46,40 +110,12 @@ function getDisks(callback) {
platformDataDisk: values[2].filesystem,
appsDataDisk: values[3].filesystem,
dockerDataDisk: values[4].filesystem,
backupsDisk: null,
apps: {}
backupsDisk: values[5],
apps: values[6],
volumes: values[7]
};
apps.getAll(function (error, allApps) {
if (error) return callback(error);
async.eachSeries(allApps, function (app, iteratorDone) {
if (!app.dataDir) {
disks.apps[app.id] = disks.appsDataDisk;
return iteratorDone();
}
dfFileAsync(app.dataDir, function (error, result) {
disks.apps[app.id] = error ? disks.appsDataDisk : result.filesystem; // ignore any errors
iteratorDone();
});
}, function (error) {
if (error) return callback(error);
settings.getBackupConfig(function (error, backupConfig) {
if (error) return callback(error);
if (backupConfig.provider !== 'filesystem') return callback(null, disks);
dfFileAsync(backupConfig.backupFolder, function (error, result) {
if (error) return callback(error);
disks.backupsDisk = result.filesystem;
callback(null, disks);
});
});
});
});
callback(null, disks);
});
});
}