fix(xo-server-backup-reports/test): don't swallow errors (#5491)

See #5486
This commit is contained in:
Julien Fontanet
2021-01-08 14:24:13 +01:00
committed by GitHub
parent 26614b5f40
commit 711b722118
2 changed files with 45 additions and 42 deletions

View File

@@ -14,7 +14,7 @@
> Users must be able to say: “I had this issue, happy to know it's fixed”
- [VM/network] Change VIF's locking mode automatically to `locked` when adding allowed IPs (PR [#5472](https://github.com/vatesfr/xen-orchestra/pull/5472))
- [Backup Reports] Don't hide errors during plugin test [#5486](https://github.com/vatesfr/xen-orchestra/issues/5486) (PR [#5491](https://github.com/vatesfr/xen-orchestra/pull/5491))
### Packages to release
@@ -33,5 +33,6 @@
>
> In case of conflict, the highest (lowest in previous list) `$version` wins.
- xo-server-backup-reports patch
- xo-server minor
- xo-server-web-hooks minor

View File

@@ -193,7 +193,13 @@ const toMarkdown = parts => {
class BackupReportsXoPlugin {
constructor(xo) {
this._xo = xo
this._report = this._report.bind(this)
this._eventListener = async (...args) => {
try {
this._report(...args)
} catch (error) {
logger.warn(error)
}
}
}
configure({ toMails, toXmpp }) {
@@ -202,7 +208,7 @@ class BackupReportsXoPlugin {
}
load() {
this._xo.on('job:terminated', this._report)
this._xo.on('job:terminated', this._eventListener)
}
test({ runId }) {
@@ -210,50 +216,46 @@ class BackupReportsXoPlugin {
}
unload() {
this._xo.removeListener('job:terminated', this._report)
this._xo.removeListener('job:terminated', this._eventListener)
}
async _report(runJobId, { type, status } = {}, force) {
const xo = this._xo
try {
if (type === 'call') {
return this._legacyVmHandler(status)
}
const log = await xo.getBackupNgLogs(runJobId)
if (log === undefined) {
throw new Error(`no log found with runId=${JSON.stringify(runJobId)}`)
}
const reportWhen = log.data.reportWhen
if (
!force &&
(reportWhen === 'never' ||
// Handle improper value introduced by:
// https://github.com/vatesfr/xen-orchestra/commit/753ee994f2948bbaca9d3161eaab82329a682773#diff-9c044ab8a42ed6576ea927a64c1ec3ebR105
reportWhen === 'Never' ||
(reportWhen === 'failure' && log.status === 'success'))
) {
return
}
const [job, schedule] = await Promise.all([
await xo.getJob(log.jobId),
await xo.getSchedule(log.scheduleId).catch(error => {
logger.warn(error)
}),
])
if (job.type === 'backup') {
return this._ngVmHandler(log, job, schedule, force)
} else if (job.type === 'metadataBackup') {
return this._metadataHandler(log, job, schedule, force)
}
throw new Error(`Unknown backup job type: ${job.type}`)
} catch (error) {
logger.warn(error)
if (type === 'call') {
return this._legacyVmHandler(status)
}
const log = await xo.getBackupNgLogs(runJobId)
if (log === undefined) {
throw new Error(`no log found with runId=${JSON.stringify(runJobId)}`)
}
const reportWhen = log.data.reportWhen
if (
!force &&
(reportWhen === 'never' ||
// Handle improper value introduced by:
// https://github.com/vatesfr/xen-orchestra/commit/753ee994f2948bbaca9d3161eaab82329a682773#diff-9c044ab8a42ed6576ea927a64c1ec3ebR105
reportWhen === 'Never' ||
(reportWhen === 'failure' && log.status === 'success'))
) {
return
}
const [job, schedule] = await Promise.all([
await xo.getJob(log.jobId),
await xo.getSchedule(log.scheduleId).catch(error => {
logger.warn(error)
}),
])
if (job.type === 'backup') {
return this._ngVmHandler(log, job, schedule, force)
} else if (job.type === 'metadataBackup') {
return this._metadataHandler(log, job, schedule, force)
}
throw new Error(`Unknown backup job type: ${job.type}`)
}
async _metadataHandler(log, { name: jobName }, schedule, force) {