khy_admin/start-server.js

167 lines
4.5 KiB
JavaScript

#!/usr/bin/env node
/**
* Server Starter for KHY Admin Dashboard
*
* This script starts a local server and opens the preview pages
* Usage: node start-server.js
*/
const { spawn } = require("child_process");
const { exec } = require("child_process");
const path = require("path");
const fs = require("fs");
const PORT = 8080;
const BASE_URL = `http://localhost:${PORT}`;
const PID_FILE = path.join(__dirname, ".server.pid");
console.log("Starting KHY Admin Preview Server");
console.log("===================================");
console.log("");
// Function to open URL in default browser
function openBrowser(url) {
const start =
process.platform === "darwin"
? "open"
: process.platform === "win32"
? "start"
: "xdg-open";
exec(`${start} ${url}`, (error) => {
if (error) {
console.log(`Please manually open: ${url}`);
}
});
}
// Function to save server PID
function saveServerPID(pid) {
try {
fs.writeFileSync(PID_FILE, pid.toString());
console.log(`Server PID saved: ${pid}`);
} catch (error) {
console.log(`Could not save PID: ${error.message}`);
}
}
// Function to kill server by PID
function killServerByPID() {
try {
if (fs.existsSync(PID_FILE)) {
const pid = fs.readFileSync(PID_FILE, "utf8").trim();
console.log(`Killing server with PID: ${pid}`);
// Kill the process
process.kill(parseInt(pid), "SIGTERM");
// Remove PID file
fs.unlinkSync(PID_FILE);
console.log(`Server killed successfully`);
return true;
}
} catch (error) {
console.log(`Could not kill server: ${error.message}`);
}
return false;
}
// Function to start the server
function startServer() {
console.log(`Starting server on port ${PORT}...`);
// Try Python first, then Node.js http-server
const pythonServer = spawn(
"python3",
["-m", "http.server", PORT.toString()],
{
stdio: "pipe",
cwd: __dirname,
}
);
// Save the server PID
saveServerPID(pythonServer.pid);
pythonServer.stdout.on("data", (data) => {
console.log(`Server output: ${data}`);
});
pythonServer.stderr.on("data", (data) => {
console.log(`Server error: ${data}`);
});
pythonServer.on("close", (code) => {
console.log(`Server stopped with code ${code}`);
// Clean up PID file when server stops
if (fs.existsSync(PID_FILE)) {
fs.unlinkSync(PID_FILE);
}
});
// Wait a moment for server to start
setTimeout(() => {
console.log("");
console.log("Server started successfully!");
console.log("");
console.log("Preview URLs:");
console.log(` Admin Dashboard: ${BASE_URL}/admin.html`);
console.log(` Homepage: ${BASE_URL}/index.html`);
console.log(` Product Catalog: ${BASE_URL}/product-catalog.html`);
console.log(` Product Details: ${BASE_URL}/product-detail.html`);
console.log("");
console.log("Opening preview pages...");
// Open preview pages
setTimeout(() => openBrowser(`${BASE_URL}/admin.html`), 1000);
setTimeout(() => openBrowser(`${BASE_URL}/index.html`), 2000);
setTimeout(() => openBrowser(`${BASE_URL}/product-catalog.html`), 3000);
console.log("");
console.log("Preview environment ready!");
console.log("Press Ctrl+C to stop the server");
console.log("");
}, 2000);
// Handle Ctrl+C
process.on("SIGINT", () => {
console.log("");
console.log("Stopping server...");
pythonServer.kill();
process.exit(0);
});
}
// Check if port is already in use
const net = require("net");
const server = net.createServer();
server.listen(PORT, () => {
server.close(() => {
startServer();
});
});
server.on("error", (err) => {
if (err.code === "EADDRINUSE") {
console.log(`Port ${PORT} is already in use`);
console.log("The server might already be running");
console.log("");
console.log("If server is running, you can access:");
console.log(` Admin Dashboard: ${BASE_URL}/admin.html`);
console.log(` Homepage: ${BASE_URL}/index.html`);
console.log(` Product Catalog: ${BASE_URL}/product-catalog.html`);
console.log(` Product Details: ${BASE_URL}/product-detail.html`);
console.log("");
console.log("Opening preview pages...");
// Open preview pages anyway
setTimeout(() => openBrowser(`${BASE_URL}/admin.html`), 1000);
setTimeout(() => openBrowser(`${BASE_URL}/index.html`), 2000);
setTimeout(() => openBrowser(`${BASE_URL}/product-catalog.html`), 3000);
} else {
console.error("Error starting server:", err.message);
process.exit(1);
}
});