From 35f6476d0f1395e2273cca4fec65bee1a39d3b43 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Mon, 13 Mar 2023 09:10:15 +0100 Subject: [PATCH] feat(xo-server/rest-api): expose backup logs (#6711) --- CHANGELOG.unreleased.md | 3 +- packages/xo-server/src/xo-mixins/rest-api.mjs | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.unreleased.md b/CHANGELOG.unreleased.md index ff02ea5ec..c735b2eec 100644 --- a/CHANGELOG.unreleased.md +++ b/CHANGELOG.unreleased.md @@ -12,6 +12,7 @@ > Users must be able to say: “I had this issue, happy to know it's fixed” - [Backup/Restore] Fix restore via a proxy showing as interupted (PR [#6702](https://github.com/vatesfr/xen-orchestra/pull/6702)) +- [REST API] Backup logs are now available at `/rest/v0/backups/logs` ### Packages to release @@ -30,7 +31,7 @@ - @xen-orchestra/backups minor -- xo-server patch +- xo-server minor - xo-web patch diff --git a/packages/xo-server/src/xo-mixins/rest-api.mjs b/packages/xo-server/src/xo-mixins/rest-api.mjs index 4fe4b22d4..0356b71ca 100644 --- a/packages/xo-server/src/xo-mixins/rest-api.mjs +++ b/packages/xo-server/src/xo-mixins/rest-api.mjs @@ -119,6 +119,9 @@ export default class RestApi { }) ) + collections.backups = { id: 'backups' } + collections.restore = { id: 'restore' } + collections.vms.actions = { __proto__: null, @@ -159,6 +162,34 @@ export default class RestApi { }) api.get('/', (req, res) => sendObjects(collections, req, res)) + + api + .get(['/backups', '/restore'], (req, res) => { + sendObjects([{ id: 'logs' }], req, res) + }) + .get( + '/backups/logs', + wrap(async (req, res) => { + const logs = await app.getBackupNgLogsSorted({ + filter: ({ message: m }) => m === 'backup' || m === 'metadata', + }) + sendObjects(logs, req, res) + }) + ) + .get( + '/restore/logs', + wrap(async (req, res) => { + const logs = await app.getBackupNgLogsSorted({ filter: _ => _.message === 'restore' }) + sendObjects(logs, req, res) + }) + ) + .get( + ['/backups/logs/:id', '/restore/logs/:id'], + wrap(async (req, res) => { + res.json(await app.getBackupNgLogs(req.params.id)) + }) + ) + api.get( '/:collection', wrap(async (req, res) => {