Add collectd for backups

This commit is contained in:
Girish Ramakrishnan
2020-01-31 13:37:07 -08:00
parent 1981493398
commit e1ded9f7b5
7 changed files with 46 additions and 4 deletions
+1 -1
View File
@@ -52,7 +52,7 @@ var addons = require('./addons.js'),
util = require('util'),
_ = require('underscore');
const COLLECTD_CONFIG_EJS = fs.readFileSync(__dirname + '/collectd.config.ejs', { encoding: 'utf8' }),
const COLLECTD_CONFIG_EJS = fs.readFileSync(__dirname + '/collectd/app.ejs', { encoding: 'utf8' }),
MV_VOLUME_CMD = path.join(__dirname, 'scripts/mvvolume.sh'),
LOGROTATE_CONFIG_EJS = fs.readFileSync(__dirname + '/logrotate.ejs', { encoding: 'utf8' }),
CONFIGURE_LOGROTATE_CMD = path.join(__dirname, 'scripts/configurelogrotate.sh');
+17
View File
@@ -30,6 +30,8 @@ exports = module.exports = {
checkConfiguration: checkConfiguration,
configureCollectd: configureCollectd,
SECRET_PLACEHOLDER: String.fromCharCode(0x25CF).repeat(8),
// for testing
@@ -44,12 +46,14 @@ var addons = require('./addons.js'),
assert = require('assert'),
backupdb = require('./backupdb.js'),
BoxError = require('./boxerror.js'),
collectd = require('./collectd.js'),
constants = require('./constants.js'),
crypto = require('crypto'),
database = require('./database.js'),
DataLayout = require('./datalayout.js'),
debug = require('debug')('box:backups'),
df = require('@sindresorhus/df'),
ejs = require('ejs'),
eventlog = require('./eventlog.js'),
fs = require('fs'),
locker = require('./locker.js'),
@@ -69,6 +73,7 @@ var addons = require('./addons.js'),
zlib = require('zlib');
const BACKUP_UPLOAD_CMD = path.join(__dirname, 'scripts/backupupload.js');
const COLLECTD_CONFIG_EJS = fs.readFileSync(__dirname + '/collectd/cloudron-backup.ejs', { encoding: 'utf8' });
function debugApp(app) {
assert(typeof app === 'object');
@@ -1302,3 +1307,15 @@ function checkConfiguration(callback) {
callback(null, message);
});
}
function configureCollectd(backupConfig, callback) {
assert.strictEqual(typeof backupConfig, 'object');
assert.strictEqual(typeof callback, 'function');
if (backupConfig.provider === 'filesystem') {
const collectdConf = ejs.render(COLLECTD_CONFIG_EJS, { backupDir: backupConfig.backupFolder });
collectd.addProfile('cloudron-backup', collectdConf, callback);
} else {
collectd.removeProfile('cloudron-backup', callback);
}
}
+9
View File
@@ -0,0 +1,9 @@
<Plugin python>
<Module du>
<Path>
Instance "cloudron-backup"
Dir "<%= backupDir %>"
</Path>
</Module>
</Plugin>
+1 -1
View File
@@ -378,7 +378,7 @@ function setBackupConfig(backupConfig, callback) {
notifyChange(exports.BACKUP_CONFIG_KEY, backupConfig);
callback(null);
backups.configureCollectd(backupConfig, callback);
});
});
});
+15 -2
View File
@@ -16,7 +16,8 @@ const apps = require('./apps.js'),
notifications = require('./notifications.js'),
os = require('os'),
paths = require('./paths.js'),
safe = require('safetydance');
safe = require('safetydance'),
settings = require('./settings.js');
function getDisks(callback) {
assert.strictEqual(typeof callback, 'function');
@@ -45,6 +46,7 @@ function getDisks(callback) {
platformDataDisk: values[2].filesystem,
appsDataDisk: values[3].filesystem,
dockerDataDisk: values[4].filesystem,
backupsDisk: null,
apps: {}
};
@@ -64,7 +66,18 @@ function getDisks(callback) {
}, function (error) {
if (error) return callback(error);
callback(null, disks);
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);
});
});
});
});
});