From 398376108d204d93e1afea42eaccc82772216446 Mon Sep 17 00:00:00 2001 From: zadam Date: Tue, 1 Feb 2022 21:22:43 +0100 Subject: [PATCH] added integrity check button into advanced options. --- package-lock.json | 14 +++++++------- package.json | 2 +- src/public/app/dialogs/options/advanced.js | 19 ++++++++++++++++++- src/routes/api/database.js | 13 ++++++++++++- src/routes/routes.js | 4 +++- 5 files changed, 41 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3b588d250..eb4048395 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,7 +44,7 @@ "jsdom": "19.0.0", "mime-types": "2.1.34", "multer": "1.4.4", - "node-abi": "3.5.0", + "node-abi": "3.7.0", "normalize-strings": "1.1.1", "open": "8.4.0", "portscanner": "2.2.0", @@ -7765,9 +7765,9 @@ "dev": true }, "node_modules/node-abi": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.5.0.tgz", - "integrity": "sha512-LtHvNIBgOy5mO8mPEUtkCW/YCRWYEKshIvqhe1GHHyXEHEB5mgICyYnAcl4qan3uFeRROErKGzatFHPf6kDxWw==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.7.0.tgz", + "integrity": "sha512-3J+U4CvxVNEk9+lGdJkmYbN8cIN0HMTDT9R0ezX7pmp7aD6BaKsfAHwVn3IvVg6pYIRUuQ+gHW1eawrvywnSQQ==", "dependencies": { "semver": "^7.3.5" }, @@ -17345,9 +17345,9 @@ "dev": true }, "node-abi": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.5.0.tgz", - "integrity": "sha512-LtHvNIBgOy5mO8mPEUtkCW/YCRWYEKshIvqhe1GHHyXEHEB5mgICyYnAcl4qan3uFeRROErKGzatFHPf6kDxWw==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.7.0.tgz", + "integrity": "sha512-3J+U4CvxVNEk9+lGdJkmYbN8cIN0HMTDT9R0ezX7pmp7aD6BaKsfAHwVn3IvVg6pYIRUuQ+gHW1eawrvywnSQQ==", "requires": { "semver": "^7.3.5" } diff --git a/package.json b/package.json index c9be06397..97e1bbb24 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "jsdom": "19.0.0", "mime-types": "2.1.34", "multer": "1.4.4", - "node-abi": "3.5.0", + "node-abi": "3.7.0", "normalize-strings": "1.1.1", "open": "8.4.0", "portscanner": "2.2.0", diff --git a/src/public/app/dialogs/options/advanced.js b/src/public/app/dialogs/options/advanced.js index 930fa5669..1c8c1b10e 100644 --- a/src/public/app/dialogs/options/advanced.js +++ b/src/public/app/dialogs/options/advanced.js @@ -13,6 +13,12 @@ const TPL = `

+

Database integrity check

+ +

This will check that the database is not corrupted on the SQLite level. It might take some time, depending on the DB size.

+ +

+

Consistency checks



@@ -37,9 +43,9 @@ export default class AdvancedOptions { this.$forceFullSyncButton = $("#force-full-sync-button"); this.$fillEntityChangesButton = $("#fill-entity-changes-button"); this.$anonymizeButton = $("#anonymize-button"); - this.$backupDatabaseButton = $("#backup-database-button"); this.$vacuumDatabaseButton = $("#vacuum-database-button"); this.$findAndFixConsistencyIssuesButton = $("#find-and-fix-consistency-issues-button"); + this.$checkIntegrityButton = $("#check-integrity-button"); this.$forceFullSyncButton.on('click', async () => { await server.post('sync/force-full-sync'); @@ -75,5 +81,16 @@ export default class AdvancedOptions { toastService.showMessage("Consistency issues should be fixed."); }); + + this.$checkIntegrityButton.on('click', async () => { + const {results} = await server.get('database/check-integrity'); + + if (results.length === 1 && results[0].integrity_check === "ok") { + toastService.showMessage("Integrity check succeeded - no problems found."); + } + else { + toastService.showMessage("Integrity check failed: " + JSON.stringify(results, null, 2), 15000); + } + }); } } diff --git a/src/routes/api/database.js b/src/routes/api/database.js index 286135171..40b22f9cf 100644 --- a/src/routes/api/database.js +++ b/src/routes/api/database.js @@ -22,6 +22,16 @@ function vacuumDatabase() { log.info("Database has been vacuumed."); } +function checkIntegrity() { + const results = sql.getRows("PRAGMA integrity_check"); + + log.info("Integrity check result: " + JSON.stringify(results)); + + return { + results + }; +} + function findAndFixConsistencyIssues() { consistencyChecksService.runOnDemandChecks(true); } @@ -30,5 +40,6 @@ module.exports = { backupDatabase, vacuumDatabase, findAndFixConsistencyIssues, - anonymize + anonymize, + checkIntegrity }; diff --git a/src/routes/routes.js b/src/routes/routes.js index 1e7eb5674..9681211e8 100644 --- a/src/routes/routes.js +++ b/src/routes/routes.js @@ -334,6 +334,8 @@ function register(app) { route(POST, '/api/database/find-and-fix-consistency-issues', [auth.checkApiAuthOrElectron, csrfMiddleware], databaseRoute.findAndFixConsistencyIssues, apiResultHandler, false); + apiRoute(GET, '/api/database/check-integrity', databaseRoute.checkIntegrity); + apiRoute(POST, '/api/script/exec', scriptRoute.exec); apiRoute(POST, '/api/script/run/:noteId', scriptRoute.run); apiRoute(GET, '/api/script/startup', scriptRoute.getStartupBundles); @@ -387,7 +389,7 @@ function register(app) { apiRoute(DELETE, '/api/etapi-tokens/:etapiTokenId', etapiTokensApiRoutes.deleteToken); shareRoutes.register(router); - + etapiAuthRoutes.register(router); etapiAttributeRoutes.register(router); etapiBranchRoutes.register(router);