diff --git a/src/apps.js b/src/apps.js index 750516284..d90e57cfc 100644 --- a/src/apps.js +++ b/src/apps.js @@ -1097,10 +1097,11 @@ async function scheduleTask(appId, installationState, taskId) { }); } -async function addTask(appId, installationState, task) { +async function addTask(appId, installationState, task, auditSource) { assert.strictEqual(typeof appId, 'string'); assert.strictEqual(typeof installationState, 'string'); assert.strictEqual(typeof task, 'object'); // { args, values } + assert.strictEqual(typeof auditSource, 'object'); const { args, values } = task; // TODO: match the SQL logic to match checkAppState. this means checking the error.installationState and installationState. Unfortunately, former is JSON right now @@ -1279,7 +1280,7 @@ async function install(data, auditSource) { requiredState: app.installationState }; - const taskId = await addTask(appId, app.installationState, task); + const taskId = await addTask(appId, app.installationState, task, auditSource); const newApp = _.extend({}, _.omit(app, 'icon'), { appStoreId, manifest, location, domain, portBindings }); newApp.fqdn = dns.fqdn(newApp.location, domainObjectMap[newApp.domain]); @@ -1387,7 +1388,7 @@ async function setMemoryLimit(app, memoryLimit, auditSource) { args: {}, values: { memoryLimit } }; - const taskId = await addTask(appId, exports.ISTATE_PENDING_RESIZE, task); + const taskId = await addTask(appId, exports.ISTATE_PENDING_RESIZE, task, auditSource); await eventlog.add(eventlog.ACTION_APP_CONFIGURE, auditSource, { appId, app, memoryLimit, taskId }); @@ -1410,7 +1411,7 @@ async function setCpuShares(app, cpuShares, auditSource) { args: {}, values: { cpuShares } }; - const taskId = await safe(addTask(appId, exports.ISTATE_PENDING_RESIZE, task)); + const taskId = await safe(addTask(appId, exports.ISTATE_PENDING_RESIZE, task, auditSource)); await eventlog.add(eventlog.ACTION_APP_CONFIGURE, auditSource, { appId, app, cpuShares, taskId }); @@ -1430,7 +1431,7 @@ async function setMounts(app, mounts, auditSource) { args: {}, values: { mounts } }; - const [taskError, taskId] = await safe(addTask(appId, exports.ISTATE_PENDING_RECREATE_CONTAINER, task)); + const [taskError, taskId] = await safe(addTask(appId, exports.ISTATE_PENDING_RECREATE_CONTAINER, task, auditSource)); if (taskError && taskError.reason === BoxError.ALREADY_EXISTS) throw new BoxError(BoxError.CONFLICT, 'Duplicate mount points'); if (taskError) throw taskError; @@ -1455,7 +1456,7 @@ async function setEnvironment(app, env, auditSource) { args: {}, values: { env } }; - const taskId = await addTask(appId, exports.ISTATE_PENDING_RECREATE_CONTAINER, task); + const taskId = await addTask(appId, exports.ISTATE_PENDING_RECREATE_CONTAINER, task, auditSource); await eventlog.add(eventlog.ACTION_APP_CONFIGURE, auditSource, { appId, app, env, taskId }); @@ -1478,7 +1479,7 @@ async function setDebugMode(app, debugMode, auditSource) { args: {}, values: { debugMode } }; - const taskId = await addTask(appId, exports.ISTATE_PENDING_DEBUG, task); + const taskId = await addTask(appId, exports.ISTATE_PENDING_DEBUG, task, auditSource); await eventlog.add(eventlog.ACTION_APP_CONFIGURE, auditSource, { appId, app, debugMode, taskId }); @@ -1520,7 +1521,7 @@ async function setMailbox(app, data, auditSource) { args: {}, values: { enableMailbox, mailboxName, mailboxDomain } }; - const taskId = await addTask(appId, exports.ISTATE_PENDING_RECREATE_CONTAINER, task); + const taskId = await addTask(appId, exports.ISTATE_PENDING_RECREATE_CONTAINER, task, auditSource); await eventlog.add(eventlog.ACTION_APP_CONFIGURE, auditSource, { appId, app, mailboxName, mailboxDomain, taskId }); @@ -1555,7 +1556,7 @@ async function setInbox(app, data, auditSource) { args: {}, values: { enableInbox, inboxName, inboxDomain } }; - const taskId = await addTask(appId, exports.ISTATE_PENDING_RECREATE_CONTAINER, task); + const taskId = await addTask(appId, exports.ISTATE_PENDING_RECREATE_CONTAINER, task, auditSource); await eventlog.add(eventlog.ACTION_APP_CONFIGURE, auditSource, { appId, app, enableInbox, inboxName, inboxDomain, taskId }); @@ -1675,7 +1676,7 @@ async function setLocation(app, data, auditSource) { }, values }; - let [taskError, taskId] = await safe(addTask(appId, exports.ISTATE_PENDING_LOCATION_CHANGE, task)); + let [taskError, taskId] = await safe(addTask(appId, exports.ISTATE_PENDING_LOCATION_CHANGE, task, auditSource)); if (taskError && taskError.reason === BoxError.ALREADY_EXISTS) taskError = getDuplicateErrorDetails(error.message, locations, domainObjectMap, data.portBindings); if (taskError) throw taskError; @@ -1704,7 +1705,7 @@ async function setDataDir(app, dataDir, auditSource) { args: { newDataDir: dataDir }, values: {} }; - const taskId = await addTask(appId, exports.ISTATE_PENDING_DATA_DIR_MIGRATION, task); + const taskId = await addTask(appId, exports.ISTATE_PENDING_DATA_DIR_MIGRATION, task, auditSource); await eventlog.add(eventlog.ACTION_APP_CONFIGURE, auditSource, { appId, app, dataDir, taskId }); @@ -1778,7 +1779,7 @@ async function updateApp(app, data, auditSource) { args: { updateConfig }, values }; - const taskId = await addTask(appId, exports.ISTATE_PENDING_UPDATE, task); + const taskId = await addTask(appId, exports.ISTATE_PENDING_UPDATE, task, auditSource); await eventlog.add(eventlog.ACTION_APP_UPDATE, auditSource, { appId, app, skipBackup, toManifest: manifest, fromManifest: app.manifest, force: data.force, taskId }); @@ -1897,7 +1898,7 @@ async function repair(app, data, auditSource) { } } - const taskId = await addTask(appId, errorState, task); + const taskId = await addTask(appId, errorState, task, auditSource); await eventlog.add(eventlog.ACTION_APP_REPAIR, auditSource, { app, taskId }); @@ -1944,7 +1945,7 @@ async function restore(app, backupId, auditSource) { values }; - const taskId = await addTask(appId, exports.ISTATE_PENDING_RESTORE, task); + const taskId = await addTask(appId, exports.ISTATE_PENDING_RESTORE, task, auditSource); await eventlog.add(eventlog.ACTION_APP_RESTORE, auditSource, { app: app, backupId: backupInfo.id, fromManifest: app.manifest, toManifest: backupInfo.manifest, taskId }); @@ -2010,7 +2011,7 @@ async function importApp(app, data, auditSource) { }, values: {} }; - const taskId = await addTask(appId, exports.ISTATE_PENDING_IMPORT, task); + const taskId = await addTask(appId, exports.ISTATE_PENDING_IMPORT, task, auditSource); await eventlog.add(eventlog.ACTION_APP_IMPORT, auditSource, { app: app, backupId, fromManifest: app.manifest, toManifest: app.manifest, taskId }); @@ -2032,7 +2033,7 @@ async function exportApp(app, data, auditSource) { values: {} }; - const taskId = await addTask(appId, exports.ISTATE_PENDING_BACKUP, task); + const taskId = await addTask(appId, exports.ISTATE_PENDING_BACKUP, task, auditSource); return { taskId }; } @@ -2124,7 +2125,7 @@ async function clone(app, data, user, auditSource) { values: {}, requiredState: exports.ISTATE_PENDING_CLONE }; - const taskId = await addTask(newAppId, exports.ISTATE_PENDING_CLONE, task); + const taskId = await addTask(newAppId, exports.ISTATE_PENDING_CLONE, task, auditSource); const newApp = _.extend({}, _.omit(obj, 'icon'), { appStoreId, manifest, location, domain, portBindings }); newApp.fqdn = dns.fqdn(newApp.location, domainObjectMap[newApp.domain]); @@ -2151,7 +2152,7 @@ async function uninstall(app, auditSource) { values: {}, requiredState: null // can run in any state, as long as no task is active }; - const taskId = await addTask(appId, exports.ISTATE_PENDING_UNINSTALL, task); + const taskId = await addTask(appId, exports.ISTATE_PENDING_UNINSTALL, task, auditSource); await eventlog.add(eventlog.ACTION_APP_UNINSTALL, auditSource, { appId, app, taskId }); return { taskId }; @@ -2169,7 +2170,7 @@ async function start(app, auditSource) { args: {}, values: { runState: exports.RSTATE_RUNNING } }; - const taskId = await addTask(appId, exports.ISTATE_PENDING_START, task); + const taskId = await addTask(appId, exports.ISTATE_PENDING_START, task, auditSource); await eventlog.add(eventlog.ACTION_APP_START, auditSource, { appId, app, taskId }); return { taskId }; } @@ -2186,7 +2187,7 @@ async function stop(app, auditSource) { args: {}, values: { runState: exports.RSTATE_STOPPED } }; - const taskId = await addTask(appId, exports.ISTATE_PENDING_STOP, task); + const taskId = await addTask(appId, exports.ISTATE_PENDING_STOP, task, auditSource); await eventlog.add(eventlog.ACTION_APP_STOP, auditSource, { appId, app, taskId }); @@ -2205,7 +2206,7 @@ async function restart(app, auditSource) { args: {}, values: { runState: exports.RSTATE_RUNNING } }; - const taskId = await addTask(appId, exports.ISTATE_PENDING_RESTART, task); + const taskId = await addTask(appId, exports.ISTATE_PENDING_RESTART, task, auditSource); await eventlog.add(eventlog.ACTION_APP_RESTART, auditSource, { appId, app, taskId }); @@ -2340,7 +2341,7 @@ async function backup(app, auditSource) { args: {}, values: {} }; - const taskId = await addTask(appId, exports.ISTATE_PENDING_BACKUP, task); + const taskId = await addTask(appId, exports.ISTATE_PENDING_BACKUP, task, auditSource); await eventlog.add(eventlog.ACTION_APP_BACKUP, auditSource, { app, appId, taskId }); return { taskId }; @@ -2384,7 +2385,7 @@ async function restoreInstalledApps(options, auditSource) { debug(`restoreInstalledApps: marking ${app.fqdn} for restore using restore config ${JSON.stringify(restoreConfig)}`); - const [addTaskError, taskId] = await safe(addTask(app.id, installationState, task)); + const [addTaskError, taskId] = await safe(addTask(app.id, installationState, task, auditSource)); if (addTaskError) debug(`restoreInstalledApps: error marking ${app.fqdn} for restore: ${JSON.stringify(addTaskError)}`); else debug(`restoreInstalledApps: marked ${app.id} for restore with taskId ${taskId}`); } @@ -2407,7 +2408,7 @@ async function configureInstalledApps(auditSource) { requireNullTaskId: false // ignore existing stale taskId }; - const [addTaskError, taskId] = await safe(addTask(app.id, exports.ISTATE_PENDING_CONFIGURE, task)); + const [addTaskError, taskId] = await safe(addTask(app.id, exports.ISTATE_PENDING_CONFIGURE, task, auditSource)); if (addTaskError) debug(`configureInstalledApps: error marking ${app.fqdn} for configure: ${JSON.stringify(addTaskError)}`); else debug(`configureInstalledApps: marked ${app.id} for re-configure with taskId ${taskId}`); } @@ -2435,7 +2436,7 @@ async function restartAppsUsingAddons(changedAddons, auditSource) { const [stopError] = await safe(docker.stopContainers(app.id)); if (stopError) debug(`restartAppsUsingAddons: error stopping ${app.fqdn}`, stopError); - const [addTaskError, taskId] = await safe(addTask(app.id, exports.ISTATE_PENDING_RESTART, task)); + const [addTaskError, taskId] = await safe(addTask(app.id, exports.ISTATE_PENDING_RESTART, task, auditSource)); if (addTaskError) debug(`restartAppsUsingAddons: error marking ${app.fqdn} for restart: ${JSON.stringify(addTaskError)}`); else debug(`restartAppsUsingAddons: marked ${app.id} for restart with taskId ${taskId}`); }