125 lines
4.4 KiB
JavaScript
125 lines
4.4 KiB
JavaScript
const mysql = require('mysql');
|
|
require('../helpers/config');
|
|
require('../helpers/CheckToken');
|
|
require("dotenv-safe").load();
|
|
var jwt = require('jsonwebtoken');
|
|
|
|
var MySQLConfig = {
|
|
connectionLimit: 100, // Reduzido de 1000 para 100
|
|
host: Variables('ip_mysql'),
|
|
user: Variables('user_mysql'),
|
|
database: Variables('database_mysql'),
|
|
password: Variables('password_mysql'),
|
|
charset: "utf8mb4"
|
|
};
|
|
|
|
// Criação do pool de conexões MySQL
|
|
let pool = mysql.createPool(MySQLConfig);
|
|
console.log("MySQL Pool criado!");
|
|
|
|
// Atribui a conexão global à primeira conexão disponível do pool
|
|
global.mysqlConnection = pool;
|
|
|
|
// Função para verificar se o pool está ativo
|
|
function isPoolActive() {
|
|
return pool && !pool._closed;
|
|
}
|
|
|
|
// Função para recriar o pool se ele estiver fechado
|
|
function recreatePoolIfClosed() {
|
|
if (!isPoolActive()) {
|
|
console.log('Recriando o pool de conexões MySQL...');
|
|
pool = mysql.createPool(MySQLConfig);
|
|
console.log("Novo MySQL Pool criado!");
|
|
}
|
|
}
|
|
|
|
// Função para executar uma query SQL com verificação do pool
|
|
global.execSQLQuery = function execSQLQuery(sqlQry, res, req, Parametros = null, callback = null) {
|
|
// Verifica e recria o pool se necessário
|
|
recreatePoolIfClosed();
|
|
|
|
pool.query(sqlQry, Parametros, function (error, results, fields) {
|
|
if (error) {
|
|
console.error('Erro na consulta MySQL:', error);
|
|
|
|
if (error.toString().includes("PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR") || error.toString().includes("Connection lost")) {
|
|
console.log('Tentando reconectar e executar a consulta novamente...');
|
|
execSQLQuery(sqlQry, res, req, Parametros, callback); // Reexecuta a query
|
|
return;
|
|
}
|
|
if (error.toString().includes("Too many connections")) {
|
|
console.log('Muitas conexões abertas. Aguardando antes de tentar novamente...');
|
|
setTimeout(() => {
|
|
execSQLQuery(sqlQry, res, req, Parametros, callback);
|
|
}, 1000); // Aumente o tempo de espera para reduzir a sobrecarga
|
|
return;
|
|
}
|
|
|
|
// Retorno de erro
|
|
let Retorno = { "status": 500, "error": error, "response": [] };
|
|
res.send(JSON.stringify(Retorno));
|
|
console.log(new Date().toUTCString() + ` - ${req}/ error 500`);
|
|
if (callback) callback(Retorno);
|
|
return;
|
|
}
|
|
|
|
// Retorno de sucesso
|
|
let Retorno = { "status": 200, "error": null, "response": results };
|
|
res.send(JSON.stringify(Retorno));
|
|
console.log(new Date().toUTCString() + ` - ${req}/ success 200`);
|
|
if (callback) callback(Retorno);
|
|
});
|
|
};
|
|
|
|
// Similarmente, aplique a verificação nas outras funções
|
|
global.execMySQLQueryLogin = function execMySQLQueryLogin(sqlQry, res, req) {
|
|
recreatePoolIfClosed();
|
|
|
|
pool.query(sqlQry, function (error, results, fields) {
|
|
if (error || results.length == 0) {
|
|
res.send(JSON.stringify({
|
|
"status": 500,
|
|
"error": error,
|
|
"response": [],
|
|
"token": null
|
|
}));
|
|
console.log(new Date().toUTCString() + " - " + req + "/ error 500");
|
|
return;
|
|
}
|
|
|
|
var token = jwt.sign({ id }, process.env.SECRET, {
|
|
expiresIn: Variables('time_token')
|
|
});
|
|
res.send(JSON.stringify({
|
|
"status": 200,
|
|
"error": null,
|
|
"response": results,
|
|
"token": token
|
|
}));
|
|
console.log(new Date().toUTCString() + " - " + req + "/ success 200");
|
|
});
|
|
};
|
|
|
|
global.execSQLQueryVideo = function execSQLQueryVideo(sqlQry, res, req) {
|
|
recreatePoolIfClosed();
|
|
|
|
pool.query(sqlQry, function (error, results, fields) {
|
|
if (!error && results.length != 0) {
|
|
let idvideoaccess = results[0]['idvideoaccess'];
|
|
res.redirect(results[0]['url']);
|
|
|
|
// Atualização após redirecionamento
|
|
setTimeout(() => {
|
|
pool.query(`UPDATE videoaccess SET expired = 1 where idvideoaccess = ${idvideoaccess}`, function (error, results, fields) {
|
|
if (error) {
|
|
console.error('Erro ao atualizar videoaccess:', error);
|
|
}
|
|
});
|
|
}, 1000);
|
|
} else {
|
|
res.send("not found");
|
|
}
|
|
});
|
|
};
|