From 1ad701a70baef5eef0dfe2db873ef56c296fa5fa Mon Sep 17 00:00:00 2001 From: sairajzero Date: Mon, 2 Jan 2023 00:09:08 +0530 Subject: [PATCH] Adding checksum-db script - Usage: npm run checksum-db - Prints the total records and checksum for each table stored. --- debug/checksum-db.js | 56 ++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 57 insertions(+) create mode 100644 debug/checksum-db.js diff --git a/debug/checksum-db.js b/debug/checksum-db.js new file mode 100644 index 0000000..e893653 --- /dev/null +++ b/debug/checksum-db.js @@ -0,0 +1,56 @@ +'use strict'; + +let _I = ""; +for (let arg of process.argv) + if (/^-I=/.test(arg)) { + _I = arg.split(/=(.*)/s)[1]; + break; + } + +const DB = require('../src/database'); + +const ignoreTables = ['_backupCache', 'sinkShares']; +var ignoreTables_regex = new RegExp(ignoreTables.join("|"), "i"); +function listTables() { + return new Promise((resolve, reject) => { + DB.query("SHOW TABLES").then(result => { + let tables = []; + for (let i in result) + for (let j in result[i]) + if (!ignoreTables_regex.test(result[i][j])) + tables.push(result[i][j]); + resolve(tables); + }).catch(error => reject(error)) + }) +} + +function checksumTable(table) { + return new Promise((resolve, reject) => { + DB.query("CHECKSUM TABLE " + table).then(result => { + let checksum = result[0].Checksum; + DB.query("SELECT COUNT(*) AS rec_count FROM " + table) + .then(result => resolve({ table, rec_count: result[0].rec_count, checksum })) + .catch(error => reject(error)) + }).catch(error => reject(error)) + }) +} + +function CheckDB() { + return new Promise((resolve, reject) => { + const config = require(`../args/config${_I}.json`); + DB.connect(config["sql_user"], config["sql_pwd"], config["sql_db"], config["sql_host"]).then(pool => { + listTables().then(tables => { + Promise.allSettled(tables.map(t => checksumTable(t))).then(results => { + let records = results.filter(r => r.status === "fulfilled").map(r => r.value); + console.table(records); + let errors = results.filter(r => r.status === "rejected"); + if (errors.length) + console.error(errors.map(r => r.reason)); + resolve(true); + }).catch(error => reject(error)) + }).catch(error => reject(error)) + }).catch(error => reject(error)) + }) +} + +CheckDB().then(_ => process.exit(0)).catch(error => { console.error(error); process.exit(1); }) \ No newline at end of file diff --git a/package.json b/package.json index a737f31..a55ddd4 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "configure": "node setup/configure-settings.js", "reset-password": "node setup/reset-password.js", "create-schema": "node setup/create-schema.js", + "checksum-db": "node debug/checksum-db.js", "start": "node start.js" }, "repository": {