diff --git a/package.json b/package.json index 4845fb26b7..e082238e03 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,6 @@ "webpack-server": "node --no-experimental-fetch ./webpack/webpack.server.js", "dev-worker": "node --no-experimental-fetch ./scripts/run.js ../app/worker.ts", "dev-queue": "node --no-experimental-fetch ./scripts/run.js ../app/queueWorker.ts", - "files-healthcheck": "USE_CWD=true node --no-experimental-fetch ./scripts/run.js ../scripts/filesHealthCheck.ts", "new-files-healthcheck": "tsx ./scripts/scripts.v2/filesHealthCheck.ts", "generateAutomaticTranslationConfig": "node --no-experimental-fetch ./scripts/run.js ../scripts/scripts.v2/generateAutomaticTranslationConfig.ts", "check-translations": "node --no-experimental-fetch ./scripts/checkTranslations.mjs", diff --git a/scripts/filesHealthCheck.ts b/scripts/filesHealthCheck.ts deleted file mode 100644 index 6c468371e4..0000000000 --- a/scripts/filesHealthCheck.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { tenants } from '../app/api/tenants'; -import { DB } from '../app/api/odm'; -import { config } from '../app/api/config'; -import { files } from '../app/api/files'; -import { storage } from '../app/api/files/storage'; - -const { tenant, allTenants } = require('yargs') - .option('tenant', { - alias: 't', - type: 'string', - describe: 'Tenant to check', - default: undefined, - }) - .option('allTenants', { - alias: 'a', - type: 'boolean', - describe: 'Tenant to check', - default: false, - }).argv; - -let dbAuth = {}; - -if (process.env.DBUSER) { - dbAuth = { - auth: { authSource: 'admin' }, - user: process.env.DBUSER, - pass: process.env.DBPASS, - }; -} - -const LINE_PREFIX = process.env.LINE_PREFIX || '%> '; - -function print(content: any, error?: 'error') { - process[error ? 'stderr' : 'stdout'].write(`${LINE_PREFIX}${JSON.stringify(content)}\n`); -} - -type FileRecord = { type: string; filename: string; url?: string }; - -function filterFilesInStorage(files: string[]) { - return files.filter(file => !file.endsWith('activity.log')); -} - -async function handleTenant(tenantName: string) { - await tenants.run(async () => { - const allFilesInDb: FileRecord[] = await files.get({}); - const allFilesInStorage = await storage.listFiles(); - const filteredFilesInStorage = new Set(filterFilesInStorage(allFilesInStorage)); - let missingInStorage = 0; - const countInStorage = filteredFilesInStorage.size; - let count = 0; - - allFilesInDb.forEach(file => { - count += 1; - const existsInStorage = filteredFilesInStorage.delete( - storage.getPath(file.filename, file.type) - ); - - if (!existsInStorage && !(file.type === 'attachment' && file.url)) { - missingInStorage += 1; - print( - { - logType: 'missingInStorage', - tenant: tenants.current().name, - file, - }, - 'error' - ); - } - }); - - filteredFilesInStorage.forEach(file => { - print( - { - logType: 'missingInDb', - tenant: tenants.current().name, - file, - }, - 'error' - ); - }); - - print({ - logType: 'summary', - tenant: tenants.current().name, - storage: tenants.current().featureFlags?.s3Storage ? 's3' : 'local', - missingInStorage, - missingInDb: filteredFilesInStorage.size, - countInDb: allFilesInDb.length, - countInStorage, - }); - }, tenantName); -} - -async function run() { - await DB.connect(config.DBHOST, dbAuth); - await tenants.setupTenants(); - - if (!allTenants) { - return await handleTenant(tenant); - } - - await Object.keys(tenants.tenants).reduce(async (prev, tenantName) => { - await prev; - await handleTenant(tenantName); - }, Promise.resolve()); -} - -run().finally(() => { - process.exit(); -}); diff --git a/scripts/scripts.v2/filesHealthCheck.ts b/scripts/scripts.v2/filesHealthCheck.ts index 13a9ce4e20..117918ad50 100644 --- a/scripts/scripts.v2/filesHealthCheck.ts +++ b/scripts/scripts.v2/filesHealthCheck.ts @@ -37,12 +37,6 @@ function print(content: any, error?: 'error') { process[error ? 'stderr' : 'stdout'].write(`${LINE_PREFIX}${JSON.stringify(content)}\n`); } -type FileRecord = { type: string; filename: string; url?: string }; - -function filterFilesInStorage(files: string[]) { - return files.filter(file => !file.endsWith('activity.log')); -} - async function handleTenant(tenantName: string) { await tenants.run(async () => { const s3Client = new S3Client({ @@ -93,20 +87,18 @@ async function handleTenant(tenantName: string) { }, tenantName); } -async function run() { +(async function run() { await DB.connect(config.DBHOST, dbAuth); await tenants.setupTenants(); if (!allTenants) { - return await handleTenant(tenant); + await handleTenant(tenant); + } else { + await Object.keys(tenants.tenants).reduce(async (prev, tenantName) => { + await prev; + await handleTenant(tenantName); + }, Promise.resolve()); } - - await Object.keys(tenants.tenants).reduce(async (prev, tenantName) => { - await prev; - await handleTenant(tenantName); - }, Promise.resolve()); -} - -run().finally(() => { - process.exit(); -}); + await tenants.model?.closeChangeStream(); + await DB.disconnect(); +})();