remove eventemitter pattern
the main issue is that ee pattern does not work across processes. with task logic, this complicates things
This commit is contained in:
27
src/cron.js
27
src/cron.js
@@ -4,7 +4,9 @@ exports = module.exports = {
|
||||
startPostActivationJobs: startPostActivationJobs,
|
||||
startPreActivationJobs: startPreActivationJobs,
|
||||
|
||||
stopJobs: stopJobs
|
||||
stopJobs: stopJobs,
|
||||
|
||||
handleSettingsChanged: handleSettingsChanged
|
||||
};
|
||||
|
||||
var appHealthMonitor = require('./apphealthmonitor.js'),
|
||||
@@ -85,11 +87,6 @@ function startPostActivationJobs(callback) {
|
||||
start: true
|
||||
});
|
||||
|
||||
settings.on(settings.TIME_ZONE_KEY, recreateJobs);
|
||||
settings.on(settings.APP_AUTOUPDATE_PATTERN_KEY, appAutoupdatePatternChanged);
|
||||
settings.on(settings.BOX_AUTOUPDATE_PATTERN_KEY, boxAutoupdatePatternChanged);
|
||||
settings.on(settings.DYNAMIC_DNS_KEY, dynamicDnsChanged);
|
||||
|
||||
settings.getAll(function (error, allSettings) {
|
||||
if (error) return callback(error);
|
||||
|
||||
@@ -102,6 +99,19 @@ function startPostActivationJobs(callback) {
|
||||
});
|
||||
}
|
||||
|
||||
function handleSettingsChanged(key, value) {
|
||||
assert.strictEqual(typeof key, 'string');
|
||||
assert.strictEqual(typeof value, 'string');
|
||||
|
||||
switch (key) {
|
||||
case settings.TIME_ZONE_KEY: recreateJobs(value); break;
|
||||
case settings.APP_AUTOUPDATE_PATTERN_KEY: appAutoupdatePatternChanged(value); break;
|
||||
case settings.BOX_AUTOUPDATE_PATTERN_KEY: boxAutoupdatePatternChanged(value); break;
|
||||
case settings.DYNAMIC_DNS_KEY: dynamicDnsChanged(value); break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
function recreateJobs(tz) {
|
||||
assert.strictEqual(typeof tz, 'string');
|
||||
|
||||
@@ -282,11 +292,6 @@ function dynamicDnsChanged(enabled) {
|
||||
function stopJobs(callback) {
|
||||
assert.strictEqual(typeof callback, 'function');
|
||||
|
||||
settings.removeListener(settings.TIME_ZONE_KEY, recreateJobs);
|
||||
settings.removeListener(settings.APP_AUTOUPDATE_PATTERN_KEY, appAutoupdatePatternChanged);
|
||||
settings.removeListener(settings.BOX_AUTOUPDATE_PATTERN_KEY, boxAutoupdatePatternChanged);
|
||||
settings.removeListener(settings.DYNAMIC_DNS_KEY, dynamicDnsChanged);
|
||||
|
||||
for (var job in gJobs) {
|
||||
if (!gJobs[job]) continue;
|
||||
gJobs[job].stop();
|
||||
|
||||
@@ -56,9 +56,6 @@ exports = module.exports = {
|
||||
|
||||
// blobs
|
||||
CLOUDRON_AVATAR_KEY: 'cloudron_avatar', // not stored in db but can be used for locked flag
|
||||
|
||||
on: on,
|
||||
removeListener: removeListener
|
||||
};
|
||||
|
||||
var addons = require('./addons.js'),
|
||||
@@ -69,6 +66,7 @@ var addons = require('./addons.js'),
|
||||
BackupsError = backups.BackupsError,
|
||||
config = require('./config.js'),
|
||||
constants = require('./constants.js'),
|
||||
cron = require('./cron.js'),
|
||||
CronJob = require('cron').CronJob,
|
||||
DatabaseError = require('./databaseerror.js'),
|
||||
moment = require('moment-timezone'),
|
||||
@@ -101,8 +99,6 @@ var gDefaults = (function () {
|
||||
return result;
|
||||
})();
|
||||
|
||||
let gEvents = new (require('events').EventEmitter)();
|
||||
|
||||
function SettingsError(reason, errorOrMessage) {
|
||||
assert.strictEqual(typeof reason, 'string');
|
||||
assert(errorOrMessage instanceof Error || typeof errorOrMessage === 'string' || typeof errorOrMessage === 'undefined');
|
||||
@@ -127,12 +123,9 @@ SettingsError.EXTERNAL_ERROR = 'External Error';
|
||||
SettingsError.NOT_FOUND = 'Not Found';
|
||||
SettingsError.BAD_FIELD = 'Bad Field';
|
||||
|
||||
function on(key, handler) {
|
||||
gEvents.on(key, handler);
|
||||
}
|
||||
|
||||
function removeListener(key, handler) {
|
||||
gEvents.removeListener(key, handler);
|
||||
function notifyChange(key, value) {
|
||||
cron.handleSettingsChanged(key, value);
|
||||
}
|
||||
|
||||
function setAppAutoupdatePattern(pattern, callback) {
|
||||
@@ -147,7 +140,7 @@ function setAppAutoupdatePattern(pattern, callback) {
|
||||
settingsdb.set(exports.APP_AUTOUPDATE_PATTERN_KEY, pattern, function (error) {
|
||||
if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error));
|
||||
|
||||
gEvents.emit(exports.APP_AUTOUPDATE_PATTERN_KEY, pattern);
|
||||
notifyChange(exports.APP_AUTOUPDATE_PATTERN_KEY, pattern);
|
||||
|
||||
return callback(null);
|
||||
});
|
||||
@@ -176,7 +169,7 @@ function setBoxAutoupdatePattern(pattern, callback) {
|
||||
settingsdb.set(exports.BOX_AUTOUPDATE_PATTERN_KEY, pattern, function (error) {
|
||||
if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error));
|
||||
|
||||
gEvents.emit(exports.BOX_AUTOUPDATE_PATTERN_KEY, pattern);
|
||||
notifyChange(exports.BOX_AUTOUPDATE_PATTERN_KEY, pattern);
|
||||
|
||||
return callback(null);
|
||||
});
|
||||
@@ -202,7 +195,7 @@ function setTimeZone(tz, callback) {
|
||||
settingsdb.set(exports.TIME_ZONE_KEY, tz, function (error) {
|
||||
if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error));
|
||||
|
||||
gEvents.emit(exports.TIME_ZONE_KEY, tz);
|
||||
notifyChange(exports.TIME_ZONE_KEY, tz);
|
||||
|
||||
return callback(null);
|
||||
});
|
||||
@@ -241,7 +234,7 @@ function setCloudronName(name, callback) {
|
||||
settingsdb.set(exports.CLOUDRON_NAME_KEY, name, function (error) {
|
||||
if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error));
|
||||
|
||||
gEvents.emit(exports.CLOUDRON_NAME_KEY, name);
|
||||
notifyChange(exports.CLOUDRON_NAME_KEY, name);
|
||||
|
||||
return callback(null);
|
||||
});
|
||||
@@ -290,7 +283,7 @@ function setDynamicDnsConfig(enabled, callback) {
|
||||
settingsdb.set(exports.DYNAMIC_DNS_KEY, enabled ? 'enabled' : '', function (error) {
|
||||
if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error));
|
||||
|
||||
gEvents.emit(exports.DYNAMIC_DNS_KEY, enabled);
|
||||
notifyChange(exports.DYNAMIC_DNS_KEY, enabled);
|
||||
|
||||
return callback(null);
|
||||
});
|
||||
@@ -328,7 +321,7 @@ function setBackupConfig(backupConfig, callback) {
|
||||
settingsdb.set(exports.BACKUP_CONFIG_KEY, JSON.stringify(backupConfig), function (error) {
|
||||
if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error));
|
||||
|
||||
gEvents.emit(exports.BACKUP_CONFIG_KEY, backupConfig);
|
||||
notifyChange(exports.BACKUP_CONFIG_KEY, backupConfig);
|
||||
|
||||
callback(null);
|
||||
});
|
||||
@@ -354,7 +347,7 @@ function setEmailDigest(enabled, callback) {
|
||||
settingsdb.set(exports.EMAIL_DIGEST, enabled ? 'enabled' : '', function (error) {
|
||||
if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error));
|
||||
|
||||
gEvents.emit(exports.EMAIL_DIGEST, enabled);
|
||||
notifyChange(exports.EMAIL_DIGEST, enabled);
|
||||
|
||||
callback(null);
|
||||
});
|
||||
@@ -429,7 +422,7 @@ function setAppstoreConfig(appstoreConfig, callback) {
|
||||
settingsdb.set(exports.APPSTORE_CONFIG_KEY, JSON.stringify(data), function (error) {
|
||||
if (error) return callback(new SettingsError(SettingsError.INTERNAL_ERROR, error));
|
||||
|
||||
gEvents.emit(exports.APPSTORE_CONFIG_KEY, appstoreConfig);
|
||||
notifyChange(exports.APPSTORE_CONFIG_KEY, appstoreConfig);
|
||||
|
||||
callback(null);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user