From b5fc004c0a70f7e95aea9b40cd291eac89c0f264 Mon Sep 17 00:00:00 2001 From: Jakob Ackermann Date: Thu, 4 Sep 2025 12:52:15 +0200 Subject: [PATCH] [history-v1] add script for listing owned projects with size (#28292) * [history-v1] add script for listing owned projects with size * [history-v1] handle project with no blobs record * [history-v1] add plain sumBytes for easy sum in spreadsheet GitOrigin-RevId: c20af189c223f867a6033cfb904f92a3a10c7cfb --- .../storage/scripts/list_owned_projects.mjs | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 services/history-v1/storage/scripts/list_owned_projects.mjs diff --git a/services/history-v1/storage/scripts/list_owned_projects.mjs b/services/history-v1/storage/scripts/list_owned_projects.mjs new file mode 100644 index 0000000000..caf0ac77e7 --- /dev/null +++ b/services/history-v1/storage/scripts/list_owned_projects.mjs @@ -0,0 +1,38 @@ +import mongodb from '../lib/mongodb.js' +import { ObjectId } from 'mongodb' +import { getProjectBlobsBatch } from '../lib/blob_store/index.js' + +const ONE_MIB = 1024 * 1024 + +const userId = new ObjectId(process.argv.pop()) + +const ownedProjects = await mongodb.projects + .find({ owner_ref: userId }, { projection: { _id: 1, overleaf: 1 } }) + .toArray() +const { blobs } = await getProjectBlobsBatch( + ownedProjects.map(p => p.overleaf.history.id) +) + +console.log( + 'link,id,historyId,size,avgSize,sizeBytes,nBlobs,nTextBlobs,nBinaryBlobs' +) +for (const project of ownedProjects) { + const historyId = project.overleaf.history.id.toString() + const projectBlobs = blobs.get(historyId) || [] + const sum = projectBlobs.reduce((sum, blob) => sum + blob.getByteLength(), 0) + console.log( + [ + `https://admin.overleaf.com/admin/project/${project._id}`, + project._id, + historyId, + (sum / ONE_MIB).toFixed(1) + 'MiB', + sum && (sum / projectBlobs.length / ONE_MIB).toFixed(1) + 'MiB', + sum, + projectBlobs.length, + projectBlobs.filter(b => b.getStringLength() !== null).length, + projectBlobs.filter(b => b.getStringLength() === null).length, + ].join(',') + ) +} + +process.exit(0)