diff --git a/src/databaseManager/database/database.manager.service.ts b/src/databaseManager/database/database.manager.service.ts index 6132094..98f90ce 100644 --- a/src/databaseManager/database/database.manager.service.ts +++ b/src/databaseManager/database/database.manager.service.ts @@ -108,21 +108,24 @@ export class DatabaseManagerService extends DatabaseEncryptionService { const lowerCase = "abcdefghijklmnopqrstuvwxyz"; const numbers = "0123456789"; const symbols = "!@#$%^&*()_+[]{}|;:,.<>?"; - + // Ensure at least one character from each required category let password = ""; password += upperCase.charAt(Math.floor(Math.random() * upperCase.length)); password += numbers.charAt(Math.floor(Math.random() * numbers.length)); password += symbols.charAt(Math.floor(Math.random() * symbols.length)); - + // Fill the rest with random characters from all categories const allChars = upperCase + lowerCase + numbers + symbols; for (let i = 3; i < length; i++) { password += allChars.charAt(Math.floor(Math.random() * allChars.length)); } - + // Shuffle the password to randomize the position of required characters - return password.split('').sort(() => Math.random() - 0.5).join(''); + return password + .split("") + .sort(() => Math.random() - 0.5) + .join(""); } async createDatabase(projectId: string): Promise { @@ -141,9 +144,7 @@ export class DatabaseManagerService extends DatabaseEncryptionService { const c_username = `c_user_${Math.random().toString(36).substring(2, 8)}`; const q_username = `q_user_${Math.random().toString(36).substring(2, 8)}`; const databaseName = `db_${Math.random().toString(36).substring(2, 8)}`; - const password = this.encryptPassword( - this.generatePassword() - ); + const password = this.encryptPassword(this.generatePassword()); await this.databaseNodeService.initDatabase( { diff --git a/src/vm/plugins/database.plugin.ts b/src/vm/plugins/database.plugin.ts index b354ce7..43b4fbc 100644 --- a/src/vm/plugins/database.plugin.ts +++ b/src/vm/plugins/database.plugin.ts @@ -31,7 +31,12 @@ export class DatabasePlugin extends Plugin { if (DatabasePlugin.connectionPool.has(connectionKey)) { const existingConnection = DatabasePlugin.connectionPool.get(connectionKey); - return new DatabasePlugin(name, existingConnection); + + if (!(await existingConnection.ping())) { + DatabasePlugin.connectionPool.delete(connectionKey); + } else { + return new DatabasePlugin(name, existingConnection); + } } const dbConnection = await mysql.createConnection({ @@ -40,13 +45,13 @@ export class DatabasePlugin extends Plugin { port: config.port, password: config.password, database: config.database, - idleTimeout: config.idleTimeout, connectTimeout: config.connectTimeout, enableKeepAlive: true, + idleTimeout: config.idleTimeout, + maxIdle: 10, + connectionLimit: 15, }); - // await dbConnection.query("SET SESSION MAX_EXECUTION_TIME=2000;"); - DatabasePlugin.connectionPool.set(connectionKey, dbConnection); return new DatabasePlugin(name, dbConnection); } diff --git a/tests/base/case1.ts b/tests/base/case1.ts index ebd2563..f82e77f 100644 --- a/tests/base/case1.ts +++ b/tests/base/case1.ts @@ -36,13 +36,13 @@ import runQuery from "../functions/runQuery"; // const payloadPath = path.join(__dirname, "case1-payload.js"); // const query = await createQuery( - // { token: "c69c2c75-9b30-4aa5-9641-0a931f5aad40" }, + // { token: "04c38f93-f2fb-4d2c-a8e2-791effa35239" }, // fs.readFileSync(payloadPath, { encoding: "utf-8" }) // ); // console.log(query); - const result = await runQuery("66e651f0-261b-4ebd-9749-077abffaddc2", { + const result = await runQuery("9468cf88-24f6-436a-bf42-27827329111e", { id: 1, }); diff --git a/tests/functions/createQuery.ts b/tests/functions/createQuery.ts index 6f6c9da..a1629ca 100644 --- a/tests/functions/createQuery.ts +++ b/tests/functions/createQuery.ts @@ -9,7 +9,7 @@ export default async (project: { token: string }, source: string) => { source, projectToken: project.token, }, - { headers: { "x-api-token": "43c2e96e-af25-4467-9103-1479daa6288d" } } + { headers: { "x-api-token": "efbeccd6-dde1-47dc-b3aa-4fbd773d5429" } } ); return response.data; } catch (error) { diff --git a/tests/functions/runQuery.ts b/tests/functions/runQuery.ts index 437dbfe..b022ca3 100644 --- a/tests/functions/runQuery.ts +++ b/tests/functions/runQuery.ts @@ -8,7 +8,7 @@ export default async (token: string, queryData: Record) => { queryData, { headers: { - "x-api-token": "43c2e96e-af25-4467-9103-1479daa6288d", + "x-api-token": "efbeccd6-dde1-47dc-b3aa-4fbd773d5429", Cookie: `x-session-id=gTEd90aRJFmLzJKu_1760193754588`, }, }