Clean up routes
This commit is contained in:
@@ -6,6 +6,7 @@ const path = require("path");
|
||||
const dotenv = require("dotenv");
|
||||
const mysql = require('mysql2/promise');
|
||||
const { Client } = require('ssh2');
|
||||
const { getDbConnection } = require('../utils/dbConnection'); // Import the optimized connection function
|
||||
|
||||
// Ensure environment variables are loaded
|
||||
dotenv.config({ path: path.join(__dirname, "../../.env") });
|
||||
@@ -18,50 +19,6 @@ if (!process.env.OPENAI_API_KEY) {
|
||||
console.error("Warning: OPENAI_API_KEY is not set in environment variables");
|
||||
}
|
||||
|
||||
// Helper function to setup SSH tunnel to production database
|
||||
async function setupSshTunnel() {
|
||||
const sshConfig = {
|
||||
host: process.env.PROD_SSH_HOST,
|
||||
port: process.env.PROD_SSH_PORT || 22,
|
||||
username: process.env.PROD_SSH_USER,
|
||||
privateKey: process.env.PROD_SSH_KEY_PATH
|
||||
? require('fs').readFileSync(process.env.PROD_SSH_KEY_PATH)
|
||||
: undefined,
|
||||
compress: true
|
||||
};
|
||||
|
||||
const dbConfig = {
|
||||
host: process.env.PROD_DB_HOST || 'localhost',
|
||||
user: process.env.PROD_DB_USER,
|
||||
password: process.env.PROD_DB_PASSWORD,
|
||||
database: process.env.PROD_DB_NAME,
|
||||
port: process.env.PROD_DB_PORT || 3306,
|
||||
timezone: 'Z'
|
||||
};
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const ssh = new Client();
|
||||
|
||||
ssh.on('error', (err) => {
|
||||
console.error('SSH connection error:', err);
|
||||
reject(err);
|
||||
});
|
||||
|
||||
ssh.on('ready', () => {
|
||||
ssh.forwardOut(
|
||||
'127.0.0.1',
|
||||
0,
|
||||
dbConfig.host,
|
||||
dbConfig.port,
|
||||
(err, stream) => {
|
||||
if (err) reject(err);
|
||||
resolve({ ssh, stream, dbConfig });
|
||||
}
|
||||
);
|
||||
}).connect(sshConfig);
|
||||
});
|
||||
}
|
||||
|
||||
// Debug endpoint for viewing prompt
|
||||
router.post("/debug", async (req, res) => {
|
||||
try {
|
||||
@@ -195,16 +152,12 @@ async function generateDebugResponse(productsToUse, res) {
|
||||
// Load taxonomy data first
|
||||
console.log("Loading taxonomy data...");
|
||||
try {
|
||||
// Setup MySQL connection via SSH tunnel
|
||||
const tunnel = await setupSshTunnel();
|
||||
ssh = tunnel.ssh;
|
||||
// Use optimized database connection
|
||||
const { connection, ssh: connSsh } = await getDbConnection();
|
||||
mysqlConnection = connection;
|
||||
ssh = connSsh;
|
||||
|
||||
mysqlConnection = await mysql.createConnection({
|
||||
...tunnel.dbConfig,
|
||||
stream: tunnel.stream
|
||||
});
|
||||
|
||||
console.log("MySQL connection established successfully");
|
||||
console.log("MySQL connection established successfully using optimized connection");
|
||||
|
||||
taxonomy = await getTaxonomyData(mysqlConnection);
|
||||
console.log("Successfully loaded taxonomy data");
|
||||
@@ -218,10 +171,6 @@ async function generateDebugResponse(productsToUse, res) {
|
||||
errno: taxonomyError.errno || null,
|
||||
sql: taxonomyError.sql || null,
|
||||
});
|
||||
} finally {
|
||||
// Make sure we close the connection
|
||||
if (mysqlConnection) await mysqlConnection.end();
|
||||
if (ssh) ssh.end();
|
||||
}
|
||||
|
||||
// Verify the taxonomy data structure
|
||||
@@ -282,11 +231,8 @@ async function generateDebugResponse(productsToUse, res) {
|
||||
console.log("Loading prompt...");
|
||||
|
||||
// Setup a new connection for loading the prompt
|
||||
const promptTunnel = await setupSshTunnel();
|
||||
const promptConnection = await mysql.createConnection({
|
||||
...promptTunnel.dbConfig,
|
||||
stream: promptTunnel.stream
|
||||
});
|
||||
// Use optimized connection instead of creating a new one
|
||||
const { connection: promptConnection } = await getDbConnection();
|
||||
|
||||
try {
|
||||
// Get the local PostgreSQL pool to fetch prompts
|
||||
@@ -296,7 +242,7 @@ async function generateDebugResponse(productsToUse, res) {
|
||||
throw new Error("Database connection not available");
|
||||
}
|
||||
|
||||
// First, fetch the system prompt
|
||||
// First, fetch the system prompt using the consolidated endpoint approach
|
||||
const systemPromptResult = await pool.query(`
|
||||
SELECT * FROM ai_prompts
|
||||
WHERE prompt_type = 'system'
|
||||
@@ -311,7 +257,7 @@ async function generateDebugResponse(productsToUse, res) {
|
||||
console.warn("⚠️ No system prompt found in database, will use default");
|
||||
}
|
||||
|
||||
// Then, fetch the general prompt
|
||||
// Then, fetch the general prompt using the consolidated endpoint approach
|
||||
const generalPromptResult = await pool.query(`
|
||||
SELECT * FROM ai_prompts
|
||||
WHERE prompt_type = 'general'
|
||||
@@ -458,7 +404,6 @@ async function generateDebugResponse(productsToUse, res) {
|
||||
return response;
|
||||
} finally {
|
||||
if (promptConnection) await promptConnection.end();
|
||||
if (promptTunnel.ssh) promptTunnel.ssh.end();
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Error generating debug response:", error);
|
||||
@@ -645,7 +590,7 @@ async function loadPrompt(connection, productsToValidate = null, appPool = null)
|
||||
throw new Error("Database connection not available");
|
||||
}
|
||||
|
||||
// Fetch the system prompt
|
||||
// Fetch the system prompt using the consolidated endpoint approach
|
||||
const systemPromptResult = await pool.query(`
|
||||
SELECT * FROM ai_prompts
|
||||
WHERE prompt_type = 'system'
|
||||
@@ -662,7 +607,7 @@ async function loadPrompt(connection, productsToValidate = null, appPool = null)
|
||||
console.warn("⚠️ No system prompt found in database, using default");
|
||||
}
|
||||
|
||||
// Fetch the general prompt
|
||||
// Fetch the general prompt using the consolidated endpoint approach
|
||||
const generalPromptResult = await pool.query(`
|
||||
SELECT * FROM ai_prompts
|
||||
WHERE prompt_type = 'general'
|
||||
@@ -926,15 +871,11 @@ router.post("/validate", async (req, res) => {
|
||||
let promptLength = 0; // Track prompt length for performance metrics
|
||||
|
||||
try {
|
||||
// Setup MySQL connection via SSH tunnel
|
||||
console.log("🔄 Setting up connection to production database...");
|
||||
const tunnel = await setupSshTunnel();
|
||||
ssh = tunnel.ssh;
|
||||
|
||||
connection = await mysql.createConnection({
|
||||
...tunnel.dbConfig,
|
||||
stream: tunnel.stream
|
||||
});
|
||||
// Use the optimized connection utility instead of direct SSH tunnel
|
||||
console.log("🔄 Setting up connection to production database using optimized connection...");
|
||||
const { ssh: connSsh, connection: connDB } = await getDbConnection();
|
||||
ssh = connSsh;
|
||||
connection = connDB;
|
||||
|
||||
console.log("🔄 MySQL connection established successfully");
|
||||
|
||||
@@ -1238,14 +1179,11 @@ router.get("/test-taxonomy", async (req, res) => {
|
||||
let connection = null;
|
||||
|
||||
try {
|
||||
// Setup MySQL connection via SSH tunnel
|
||||
const tunnel = await setupSshTunnel();
|
||||
ssh = tunnel.ssh;
|
||||
|
||||
connection = await mysql.createConnection({
|
||||
...tunnel.dbConfig,
|
||||
stream: tunnel.stream
|
||||
});
|
||||
// Use the optimized connection utility instead of direct SSH tunnel
|
||||
console.log("🔄 Setting up connection to production database using optimized connection...");
|
||||
const { ssh: connSsh, connection: connDB } = await getDbConnection();
|
||||
ssh = connSsh;
|
||||
connection = connDB;
|
||||
|
||||
console.log("MySQL connection established successfully for test");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user