Skip to content

Commit 19a1ee8

Browse files
committed
♻️ migrate to async/await style
Issue: CLDSRV-878
1 parent 63a33eb commit 19a1ee8

5 files changed

Lines changed: 167 additions & 154 deletions

File tree

lib/routes/veeam/get.js

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ const { responseXMLBody } = require('arsenal/build/lib/s3routes/routesUtils');
1111
* @param {object} log - logger object
1212
* @returns {undefined} -
1313
*/
14-
function getVeeamFile(request, response, bucketMd, log) {
14+
async function getVeeamFile(request, response, bucketMd, log) {
1515
if (!bucketMd) {
1616
return responseXMLBody(errors.NoSuchBucket, null, response, log);
1717
}
@@ -21,13 +21,12 @@ function getVeeamFile(request, response, bucketMd, log) {
2121
buildHeadXML('<Tagging><TagSet></TagSet></Tagging>'));
2222
}
2323

24-
return buildVeeamFileData(request, bucketMd, log, 'getVeeamFile', (err, result) => {
25-
if (err) {
26-
return responseXMLBody(err, null, response, log);
27-
}
28-
24+
try {
25+
const result = await buildVeeamFileData(request, bucketMd, log, 'getVeeamFile');
2926
return respondWithData(request, response, log, result.bucketData, result.xmlContent, result.modified);
30-
});
27+
} catch (err) {
28+
return responseXMLBody(err, null, response, log);
29+
}
3130
}
3231

3332
module.exports = getVeeamFile;

lib/routes/veeam/head.js

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,23 @@ const { responseXMLBody, responseContentHeaders } = require('arsenal/build/lib/s
1111
* @param {object} log - logger object
1212
* @returns {undefined} -
1313
*/
14-
function headVeeamFile(request, response, bucketMd, log) {
14+
async function headVeeamFile(request, response, bucketMd, log) {
1515
if (!bucketMd) {
1616
return responseXMLBody(errors.NoSuchBucket, null, response, log);
1717
}
1818

19-
return buildVeeamFileData(request, bucketMd, log, 'headVeeamFile', (err, result) => {
20-
if (err) {
21-
return responseXMLBody(err, null, response, log);
22-
}
23-
19+
try {
20+
const result = await buildVeeamFileData(request, bucketMd, log, 'headVeeamFile');
2421
return responseContentHeaders(
2522
null,
2623
{},
2724
getResponseHeader(request, result.bucketData, result.dataBuffer, result.modified, log),
2825
response,
2926
log,
3027
);
31-
});
28+
} catch (err) {
29+
return responseXMLBody(err, null, response, log);
30+
}
3231
}
3332

3433
module.exports = headVeeamFile;

lib/routes/veeam/list.js

Lines changed: 55 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ function buildXMLResponse(request, arrayOfFiles, versioned = false) {
8383
* @param {object} log - logger object
8484
* @returns {undefined} -
8585
*/
86-
function listVeeamFiles(request, response, bucketMd, log) {
86+
async function listVeeamFiles(request, response, bucketMd, log) {
8787
if (!bucketMd) {
8888
return responseXMLBody(errors.NoSuchBucket, null, response, log);
8989
}
@@ -94,60 +94,64 @@ function listVeeamFiles(request, response, bucketMd, log) {
9494
.customizeDescription('The Veeam folder does not support this action.'), null, response, log);
9595
}
9696

97-
return metadata.getBucket(request.bucketName, log, (err, data) => {
98-
if (err) {
99-
return responseXMLBody(errors.InternalError, null, response, log);
100-
}
101-
102-
const buildAndRespond = bucketMetrics => {
103-
const filesToBuild = [];
104-
const fieldsToGenerate = [];
105-
if (data._capabilities?.VeeamSOSApi?.SystemInfo) {
106-
fieldsToGenerate.push({
107-
...data._capabilities?.VeeamSOSApi?.SystemInfo,
108-
name: `${validPath}system.xml`,
109-
});
110-
}
111-
if (data._capabilities?.VeeamSOSApi?.CapacityInfo) {
112-
fieldsToGenerate.push({
113-
...data._capabilities?.VeeamSOSApi?.CapacityInfo,
114-
name: `${validPath}capacity.xml`,
115-
});
116-
}
117-
fieldsToGenerate.forEach(file => {
118-
const isCapacity = file.name.endsWith('capacity.xml');
119-
const lastModified = isCapacity
120-
? bucketMetrics.date
121-
: file.LastModified;
122-
// eslint-disable-next-line no-param-reassign
123-
delete file.LastModified;
124-
const builder = new xml2js.Builder({
125-
headless: true,
126-
});
127-
const dataBuffer = Buffer.from(buildHeadXML(builder.buildObject(file)));
128-
filesToBuild.push({
129-
...getResponseHeader(request, data,
130-
dataBuffer, lastModified, log),
131-
name: file.name,
132-
});
133-
});
134-
135-
// When `versions` is present, listing should return a versioned list
136-
return respondWithData(request, response, log, data,
137-
buildXMLResponse(request, filesToBuild, 'versions' in request.query));
138-
};
97+
let data;
98+
try {
99+
data = await new Promise((resolve, reject) =>
100+
metadata.getBucket(request.bucketName, log, (err, result) => {
101+
if (err) { return reject(err); }
102+
return resolve(result);
103+
})
104+
);
105+
} catch {
106+
return responseXMLBody(errors.InternalError, null, response, log);
107+
}
139108

140-
if (data._capabilities?.VeeamSOSApi?.CapacityInfo) {
141-
return fetchCapacityMetrics(bucketMd, request, log, 'listVeeamFiles', (err, bucketMetrics) => {
142-
if (err) {
143-
return responseXMLBody(errors.InternalError, null, response, log);
144-
}
145-
return buildAndRespond(bucketMetrics);
146-
});
109+
let bucketMetrics;
110+
if (data._capabilities?.VeeamSOSApi?.CapacityInfo) {
111+
try {
112+
bucketMetrics = await fetchCapacityMetrics(bucketMd, request, log, 'listVeeamFiles');
113+
} catch {
114+
return responseXMLBody(errors.InternalError, null, response, log);
147115
}
116+
} else {
117+
bucketMetrics = { date: new Date() };
118+
}
148119

149-
return buildAndRespond({ date: new Date() });
120+
const filesToBuild = [];
121+
const fieldsToGenerate = [];
122+
if (data._capabilities?.VeeamSOSApi?.SystemInfo) {
123+
fieldsToGenerate.push({
124+
...data._capabilities?.VeeamSOSApi?.SystemInfo,
125+
name: `${validPath}system.xml`,
126+
});
127+
}
128+
if (data._capabilities?.VeeamSOSApi?.CapacityInfo) {
129+
fieldsToGenerate.push({
130+
...data._capabilities?.VeeamSOSApi?.CapacityInfo,
131+
name: `${validPath}capacity.xml`,
132+
});
133+
}
134+
fieldsToGenerate.forEach(file => {
135+
const isCapacity = file.name.endsWith('capacity.xml');
136+
const lastModified = isCapacity
137+
? bucketMetrics.date
138+
: file.LastModified;
139+
// eslint-disable-next-line no-param-reassign
140+
delete file.LastModified;
141+
const builder = new xml2js.Builder({
142+
headless: true,
143+
});
144+
const dataBuffer = Buffer.from(buildHeadXML(builder.buildObject(file)));
145+
filesToBuild.push({
146+
...getResponseHeader(request, data,
147+
dataBuffer, lastModified, log),
148+
name: file.name,
149+
});
150150
});
151+
152+
// When `versions` is present, listing should return a versioned list
153+
return respondWithData(request, response, log, data,
154+
buildXMLResponse(request, filesToBuild, 'versions' in request.query));
151155
}
152156

153157
module.exports = listVeeamFiles;

lib/routes/veeam/put.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const async = require('async');
2+
const { callbackify } = require('util');
23
const { parseString } = require('xml2js');
34
const { receiveData, isSystemXML, getFileToBuild } = require('./utils');
45
const { s3routes, errors } = require('arsenal');
@@ -28,7 +29,7 @@ function putVeeamFile(request, response, bucketMd, log) {
2829
next => {
2930
// Extract the data from the request, keep it in memory
3031
writeContinue(request, response);
31-
return receiveData(request, log, next);
32+
return callbackify(receiveData)(request, log, next);
3233
},
3334
(value, next) => parseString(value, { explicitArray: false }, (err, parsed) => {
3435
// Convert the received XML to a JS object

0 commit comments

Comments
 (0)