diff --git a/.env.example b/.env.example index ddc1b2b..ee5fbf7 100644 --- a/.env.example +++ b/.env.example @@ -2,8 +2,8 @@ PORT=4208 # HTTPS server port (defaults to 8443, set to 0 or false to disable) HTTPS_PORT=8443 -# SQL Studio port (served when backend is started with npm run dev) -SQL_STUDIO_PORT=4210 +# Backend Monitor Interface port (served when backend is started with npm run dev) +MONITOR_PORT=4210 # Optional custom TLS cert/key paths (defaults to auto-generated certs/key.pem and certs/cert.pem) # HTTPS_KEY_PATH=./certs/key.pem # HTTPS_CERT_PATH=./certs/cert.pem diff --git a/package.json b/package.json index 682756e..bdcf98f 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "main": "index.js", "scripts": { "start": "node src/index.js", - "dev": "cross-env DEV_SQL_STUDIO=true node --watch-path=./src --watch-path=./.env --watch-path=../dashdbschema/src --watch-path=../llmorbiter/src src/index.js", + "dev": "cross-env DEV_BACKEND_MONITOR=true node --watch-path=./src --watch-path=./.env --watch-path=../dashdbschema/src --watch-path=../llmorbiter/src src/index.js", "manage-users": "node scripts/manageUsers.js", "wipe-company": "node scripts/wipeCompany.js", "docs:api": "node scripts/generateApiDocs.js", diff --git a/src/api/index.js b/src/api/index.js index 5cc1a73..17507ee 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -17,7 +17,7 @@ import { shutdownJavascriptSandboxWorkers } from '../services/javascriptSandbox. import { getOrCreateCert } from '../util/cert.js'; import { createLogger } from '../util/logger.js'; import v1Router from '../v1/index.js'; -import { startSqlStudio, stopSqlStudio, isDevMode } from '../sqlstudio/server.js'; +import { startBackendMonitor, stopBackendMonitor, isDevMode } from '../backendmonitor/server.js'; const apiLog = createLogger('api'); @@ -239,9 +239,9 @@ export async function startApi() { if (isDevMode()) { try { - await startSqlStudio(); + await startBackendMonitor(); } catch (err) { - apiLog.error('Failed to start SQL Studio:', err.message); + apiLog.error('Failed to start Backend Monitor Interface:', err.message); } } @@ -256,7 +256,7 @@ export async function startApi() { } export async function stopApi() { - await stopSqlStudio(); + await stopBackendMonitor(); if (!server && !httpsServer) return; // Long-lived SSE (and keep-alive) sockets otherwise block server.close() // forever — node --watch hangs on "Waiting for graceful termination...". diff --git a/src/sqlstudio/dbHelper.js b/src/backendmonitor/dbHelper.js similarity index 99% rename from src/sqlstudio/dbHelper.js rename to src/backendmonitor/dbHelper.js index 5ba7c10..745a6c6 100644 --- a/src/sqlstudio/dbHelper.js +++ b/src/backendmonitor/dbHelper.js @@ -37,7 +37,7 @@ export async function getDatabaseInfo() { dialect, database: dialect === 'sqlite' ? env.sqlite.filename : env.mssql.database, server: dialect === 'sqlite' ? 'local' : (env.mssql.server || 'localhost'), - port: env.sqlStudioPort, + port: env.monitorPort, }; } diff --git a/src/sqlstudio/public/app.js b/src/backendmonitor/public/app.js similarity index 99% rename from src/sqlstudio/public/app.js rename to src/backendmonitor/public/app.js index 5e520c8..0374056 100644 --- a/src/sqlstudio/public/app.js +++ b/src/backendmonitor/public/app.js @@ -1,5 +1,5 @@ /** - * Dash SQL Studio — Web Database Studio + * Backend Monitor Interface — Web Database Studio */ (function () { @@ -15,7 +15,7 @@ let queryHistory = []; try { - const saved = localStorage.getItem('dash_sql_studio_history'); + const saved = localStorage.getItem('dash_backend_monitor_history') || localStorage.getItem('dash_sql_studio_history'); if (saved) queryHistory = JSON.parse(saved); } catch (e) { queryHistory = []; @@ -1159,7 +1159,7 @@ queryHistory.unshift(item); if (queryHistory.length > 50) queryHistory.pop(); try { - localStorage.setItem('dash_sql_studio_history', JSON.stringify(queryHistory)); + localStorage.setItem('dash_backend_monitor_history', JSON.stringify(queryHistory)); } catch (e) { // ignore } @@ -1319,7 +1319,7 @@ await loadDbStatus(); await loadTables(); // Default initial query tab - openQueryTab('-- Dash SQL Studio\nSELECT 1 as connected;'); + openQueryTab('-- Backend Monitor Interface\nSELECT 1 as connected;'); } init(); diff --git a/src/sqlstudio/public/index.html b/src/backendmonitor/public/index.html similarity index 98% rename from src/sqlstudio/public/index.html rename to src/backendmonitor/public/index.html index 3edb262..559adbc 100644 --- a/src/sqlstudio/public/index.html +++ b/src/backendmonitor/public/index.html @@ -3,7 +3,7 @@ - Dash SQL Studio + Backend Monitor Interface @@ -23,7 +23,7 @@ - Dash SQL Studio + Backend Monitor Interface
DEV MODE • NO AUTH
diff --git a/src/sqlstudio/public/style.css b/src/backendmonitor/public/style.css similarity index 99% rename from src/sqlstudio/public/style.css rename to src/backendmonitor/public/style.css index 7db38c8..014bc9f 100644 --- a/src/sqlstudio/public/style.css +++ b/src/backendmonitor/public/style.css @@ -1,5 +1,5 @@ /* ========================================================================== - Dash SQL Studio — Modern SSMS Dark Theme + Backend Monitor Interface — Modern SSMS Dark Theme ========================================================================== */ :root { diff --git a/src/sqlstudio/server.js b/src/backendmonitor/server.js similarity index 83% rename from src/sqlstudio/server.js rename to src/backendmonitor/server.js index 04c80d6..dee97e0 100644 --- a/src/sqlstudio/server.js +++ b/src/backendmonitor/server.js @@ -6,15 +6,16 @@ import env from '../config/env.js'; import { createLogger } from '../util/logger.js'; import * as dbHelper from './dbHelper.js'; -const studioLog = createLogger('sqlstudio'); +const monitorLog = createLogger('backendmonitor'); const __dirname = path.dirname(fileURLToPath(import.meta.url)); -let studioServer; -let studioApp; +let monitorServer; +let monitorApp; export function isDevMode() { return ( process.env.npm_lifecycle_event === 'dev' || + process.env.DEV_BACKEND_MONITOR === 'true' || process.env.DEV_SQL_STUDIO === 'true' || process.env.DEV_MODE === 'true' ); @@ -138,39 +139,43 @@ export function buildStudioApp() { return app; } -export async function startSqlStudio() { - if (studioServer) { - return studioServer; +export async function startBackendMonitor() { + if (monitorServer) { + return monitorServer; } const app = buildStudioApp(); - studioApp = app; + monitorApp = app; const serverInstance = http.createServer(app); await new Promise((resolve, reject) => { serverInstance.once('listening', () => resolve()); serverInstance.once('error', (err) => { - studioLog.error(`Failed to listen on port ${env.sqlStudioPort}:`, err.message); + monitorLog.error(`Failed to listen on port ${env.monitorPort}:`, err.message); reject(err); }); - serverInstance.listen(env.sqlStudioPort); + serverInstance.listen(env.monitorPort); }); - studioServer = serverInstance; - studioLog.info(`SQL Studio running on http://localhost:${env.sqlStudioPort} (dev mode, no auth)`); - return studioServer; + monitorServer = serverInstance; + monitorLog.info(`Backend Monitor Interface running on http://localhost:${env.monitorPort} (dev mode, no auth)`); + return monitorServer; } -export async function stopSqlStudio() { - if (!studioServer) return; - const s = studioServer; - studioServer = undefined; - studioApp = undefined; +export async function stopBackendMonitor() { + if (!monitorServer) return; + const s = monitorServer; + monitorServer = undefined; + monitorApp = undefined; await new Promise((resolve, reject) => { s.close((err) => (err ? reject(err) : resolve())); s.closeAllConnections(); }); - studioLog.info('SQL Studio stopped'); + monitorLog.info('Backend Monitor Interface stopped'); } + +// Aliases for compatibility +export const startSqlStudio = startBackendMonitor; +export const stopSqlStudio = stopBackendMonitor; diff --git a/src/config/env.js b/src/config/env.js index 776bedb..fad79a2 100644 --- a/src/config/env.js +++ b/src/config/env.js @@ -15,7 +15,7 @@ function parseHttpsPort(val) { export default { port: Number(process.env.PORT) || 4208, httpsPort: parseHttpsPort(process.env.HTTPS_PORT), - sqlStudioPort: Number(process.env.SQL_STUDIO_PORT) || 4210, + monitorPort: Number(process.env.MONITOR_PORT || process.env.SQL_STUDIO_PORT) || 4210, httpsKeyPath: process.env.HTTPS_KEY_PATH || resolve(__dirname, '../../certs/key.pem'), httpsCertPath: process.env.HTTPS_CERT_PATH || resolve(__dirname, '../../certs/cert.pem'), logLevel: process.env.LOG_LEVEL || 'debug',