90 lines
2.7 KiB
JavaScript
90 lines
2.7 KiB
JavaScript
|
|
'use strict';
|
||
|
|
|
||
|
|
exports = module.exports = {
|
||
|
|
setProgress: setProgress,
|
||
|
|
getProgress: getProgress,
|
||
|
|
|
||
|
|
stopTask: stopTask,
|
||
|
|
|
||
|
|
TaskError: TaskError,
|
||
|
|
|
||
|
|
TASK_BACKUP: 'backup'
|
||
|
|
};
|
||
|
|
|
||
|
|
let assert = require('assert'),
|
||
|
|
BackupsError = require('./backups.js').BackupsError,
|
||
|
|
backups = require('./backups.js'),
|
||
|
|
DatabaseError = require('./databaseerror.js'),
|
||
|
|
debug = require('debug')('box:tasks'),
|
||
|
|
taskdb = require('./taskdb.js'),
|
||
|
|
util = require('util');
|
||
|
|
|
||
|
|
function TaskError(reason, errorOrMessage) {
|
||
|
|
assert.strictEqual(typeof reason, 'string');
|
||
|
|
assert(errorOrMessage instanceof Error || typeof errorOrMessage === 'string' || typeof errorOrMessage === 'undefined');
|
||
|
|
|
||
|
|
Error.call(this);
|
||
|
|
Error.captureStackTrace(this, this.constructor);
|
||
|
|
|
||
|
|
this.name = this.constructor.name;
|
||
|
|
this.reason = reason;
|
||
|
|
if (typeof errorOrMessage === 'undefined') {
|
||
|
|
this.message = reason;
|
||
|
|
} else if (typeof errorOrMessage === 'string') {
|
||
|
|
this.message = errorOrMessage;
|
||
|
|
} else {
|
||
|
|
this.message = 'Internal error';
|
||
|
|
this.nestedError = errorOrMessage;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
util.inherits(TaskError, Error);
|
||
|
|
TaskError.INTERNAL_ERROR = 'Internal Error';
|
||
|
|
TaskError.BAD_STATE = 'Bad State';
|
||
|
|
TaskError.NOT_FOUND = 'Not Found';
|
||
|
|
|
||
|
|
function setProgress(id, progress, callback) {
|
||
|
|
assert.strictEqual(typeof id, 'string');
|
||
|
|
assert.strictEqual(typeof progress, 'object');
|
||
|
|
assert.strictEqual(typeof callback, 'function');
|
||
|
|
|
||
|
|
debug(`${id}: ${JSON.stringify(progress)}`);
|
||
|
|
|
||
|
|
taskdb.setProgress(id, progress, function (error) {
|
||
|
|
if (error) return callback(new TaskError(TaskError.INTERNAL_ERROR, error));
|
||
|
|
|
||
|
|
callback();
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
function getProgress(id, callback) {
|
||
|
|
assert.strictEqual(typeof id, 'string');
|
||
|
|
assert.strictEqual(typeof callback, 'function');
|
||
|
|
|
||
|
|
taskdb.getProgress(id, function (error, progress) {
|
||
|
|
if (error && error.reason == DatabaseError.NOT_FOUND) return callback(new TaskError(TaskError.NOT_FOUND));
|
||
|
|
if (error) return callback(new TaskError(TaskError.INTERNAL_ERROR, error));
|
||
|
|
|
||
|
|
callback(null, progress);
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
function stopTask(id, auditSource, callback) {
|
||
|
|
assert.strictEqual(typeof id, 'string');
|
||
|
|
assert.strictEqual(typeof auditSource, 'object');
|
||
|
|
assert.strictEqual(typeof callback, 'function');
|
||
|
|
|
||
|
|
switch (id) {
|
||
|
|
case exports.TASK_BACKUP:
|
||
|
|
backups.stopBackupTask(auditSource, function (error) {
|
||
|
|
if (error && error.reason === BackupsError.BAD_STATE) return callback(new TaskError(TaskError.NOT_FOUND));
|
||
|
|
if (error) return callback(new TaskError(TaskError.INTERNAL_ERROR, error));
|
||
|
|
|
||
|
|
callback(null);
|
||
|
|
});
|
||
|
|
break;
|
||
|
|
|
||
|
|
default:
|
||
|
|
return callback(new TaskError(TaskError.NOT_FOUND));
|
||
|
|
}
|
||
|
|
}
|