feat(xo-server/backup): logs proxy support

This commit is contained in:
Julien Fontanet 2020-06-30 15:45:11 +02:00
parent 0ee412ccb9
commit 86bfd91c9d
2 changed files with 55 additions and 2 deletions

View File

@ -27,3 +27,5 @@
> - major: if the change breaks compatibility
>
> In case of conflict, the highest (lowest in previous list) `$version` wins.
- xo-server patch

View File

@ -666,7 +666,7 @@ export default class BackupNg {
}),
])
return app.callProxyMethod(job.proxy, 'backup.run', {
const params = {
job: {
...job,
@ -677,8 +677,59 @@ export default class BackupNg {
recordToXapi,
remotes,
schedule,
streamLogs: true,
xapis,
})
}
try {
const logsStream = await app.callProxyMethod(
job.proxy,
'backup.run',
params,
{
expectStream: true,
}
)
const localTaskIds = { __proto__: null }
for await (const log of logsStream) {
const { event, message, taskId } = log
const common = {
data: log.data,
event: 'task.' + event,
result: log.result,
status: log.status,
}
if (event === 'start') {
const { parentId } = log
if (parentId === undefined) {
// ignore root task (already handled by runJob)
localTaskIds[taskId] = runJobId
} else {
common.parentId = localTaskIds[parentId]
localTaskIds[taskId] = logger.notice(message, common)
}
} else {
const localTaskId = localTaskIds[taskId]
if (localTaskId === runJobId) {
// ignore root task (already handled by runJob)
} else {
common.taskId = localTaskId
logger.notice(message, common)
}
}
}
return
} catch (error) {
// XO API invalid parameters error
if (error.code === 10) {
delete params.streamLogs
return app.callProxyMethod(job.proxy, 'backup.run', params)
}
throw error
}
}
const srs = srIds.map(id => app.getXapiObject(id, 'SR'))