backups: stash the stats to the backups table

This commit is contained in:
Girish Ramakrishnan
2025-08-12 19:41:50 +05:30
parent 847f57855c
commit 2e16dd983f
5 changed files with 107 additions and 118 deletions

View File

@@ -2,7 +2,6 @@
const assert = require('assert'),
backupTargets = require('../backuptargets.js'),
blobs = require('../blobs.js'),
BoxError = require('../boxerror.js'),
crypto = require('crypto'),
DataLayout = require('../datalayout.js'),
@@ -164,7 +163,10 @@ async function tarPack(dataLayout, encryption, uploader, progressCallback) {
debug(`tarPack: pipeline finished: ${JSON.stringify(ps.stats())}`);
await uploader.finish();
return { size: ps.stats().transferred, sha256: hash.digest('hex') };
return {
stats: ps.stats(),
integrity: { size: ps.stats().transferred, sha256: hash.digest('hex') }
};
}
async function tarExtract(inStream, dataLayout, encryption, progressCallback) {
@@ -252,17 +254,17 @@ async function upload(backupTarget, remotePath, dataLayout, progressCallback) {
progressCallback({ message: `Uploading backup ${remotePath}` });
const uploader = await backupTargets.storageApi(backupTarget).upload(backupTarget.config, remotePath);
const { size, sha256 } = await tarPack(dataLayout, backupTarget.encryption, uploader, progressCallback);
const { stats, integrity } = await tarPack(dataLayout, backupTarget.encryption, uploader, progressCallback);
const checksumData = [{ filename: path.basename(remotePath), size, sha256 }];
const checksumData = [{ filename: path.basename(remotePath), ...integrity }];
const checksumDataJsonString = JSON.stringify(checksumData, null, 4);
const checksumDataStream = Readable.from(checksumDataJsonString);
const checksumUploader = await backupTargets.storageApi(backupTarget).upload(backupTarget.config, `${remotePath}.checksum`);
await stream.pipeline(checksumDataStream, checksumUploader.stream);
await checksumUploader.finish();
const checksumSignature = await crypto.sign(null /* algorithm */, checksumDataJsonString, backupTarget.integrityKeyPair.privateKey);
return { size, sha256, checksumSignature };
integrity.signature = await crypto.sign(null /* algorithm */, checksumDataJsonString, backupTarget.integrityKeyPair.privateKey);
return { stats, integrity };
});
}