Improve error handling of mysqlQuery and return row count as result

This commit is contained in:
Louis Lam 2023-03-24 16:08:30 +08:00
parent 097567e5f0
commit 7330db3563
2 changed files with 20 additions and 13 deletions

View File

@ -637,9 +637,7 @@ class Monitor extends BeanModel {
} else if (this.type === "mysql") { } else if (this.type === "mysql") {
let startTime = dayjs().valueOf(); let startTime = dayjs().valueOf();
await mysqlQuery(this.databaseConnectionString, this.databaseQuery); bean.msg = await mysqlQuery(this.databaseConnectionString, this.databaseQuery);
bean.msg = "";
bean.status = UP; bean.status = UP;
bean.ping = dayjs().valueOf() - startTime; bean.ping = dayjs().valueOf() - startTime;
} else if (this.type === "mongodb") { } else if (this.type === "mongodb") {

View File

@ -322,21 +322,30 @@ exports.postgresQuery = function (connectionString, query) {
* Run a query on MySQL/MariaDB * Run a query on MySQL/MariaDB
* @param {string} connectionString The database connection string * @param {string} connectionString The database connection string
* @param {string} query The query to validate the database with * @param {string} query The query to validate the database with
* @returns {Promise<(string[]|Object[]|Object)>} * @returns {Promise<(string)>}
*/ */
exports.mysqlQuery = function (connectionString, query) { exports.mysqlQuery = function (connectionString, query) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const connection = mysql.createConnection(connectionString); const connection = mysql.createConnection(connectionString);
connection.promise().query(query)
.then(res => { connection.on("error", (err) => {
resolve(res); reject(err);
}) });
.catch(err => {
connection.query(query, (err, res) => {
if (err) {
reject(err); reject(err);
}) }
.finally(() => {
connection.destroy(); // Check if res is an array
}); if (Array.isArray(res)) {
resolve("Rows: " + res.length);
} else {
resolve("No Error, but the result is not an array. Type: " + typeof res);
}
connection.destroy();
});
}); });
}; };