39 lines
999 B
JavaScript
39 lines
999 B
JavaScript
const path = require('path')
|
|
const { createLogger } = require('@xen-orchestra/log')
|
|
const { fork } = require('child_process')
|
|
|
|
const { warn } = createLogger('xo:backups:backupWorker')
|
|
|
|
const PATH = path.resolve(__dirname, '_backupWorker.js')
|
|
|
|
exports.runBackupWorker = function runBackupWorker(params, onLog) {
|
|
return new Promise((resolve, reject) => {
|
|
const worker = fork(PATH)
|
|
|
|
worker.on('exit', code => reject(new Error(`worker exited with code ${code}`)))
|
|
worker.on('error', reject)
|
|
|
|
worker.on('message', message => {
|
|
try {
|
|
if (message.type === 'result') {
|
|
if (message.status === 'success') {
|
|
resolve(message.result)
|
|
} else {
|
|
reject(message.result)
|
|
}
|
|
} else if (message.type === 'log') {
|
|
onLog(message.data)
|
|
}
|
|
} catch (error) {
|
|
warn(error)
|
|
}
|
|
})
|
|
|
|
worker.send({
|
|
action: 'run',
|
|
data: params,
|
|
runWithLogs: onLog !== undefined,
|
|
})
|
|
})
|
|
}
|