added integrity check button into advanced options.

This commit is contained in:
zadam 2022-02-01 21:22:43 +01:00
parent 61aa029582
commit 398376108d
5 changed files with 41 additions and 11 deletions

14
package-lock.json generated
View File

@ -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"
}

View File

@ -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",

View File

@ -13,6 +13,12 @@ const TPL = `
<br/>
<br/>
<h4>Database integrity check</h4>
<p>This will check that the database is not corrupted on the SQLite level. It might take some time, depending on the DB size.</p>
<button id="check-integrity-button" class="btn">Check database integrity</button><br/><br/>
<h4>Consistency checks</h4>
<button id="find-and-fix-consistency-issues-button" class="btn">Find and fix consistency issues</button><br/><br/>
@ -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);
}
});
}
}

View File

@ -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
};

View File

@ -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);