Ratankumar10/code-execution-engine
0
1require("dotenv").config();2 3const app = require("./app");4const config = require("./config");5const logger = require("./utils/logger.util");6const { ensureDir } = require("./utils/file.util");7const { verifyDocker, buildSandboxImage } = require("./utils/docker.util");8 9async function bootstrap() {10 logger.info("═══════════════════════════════════════════════");11 logger.info(" 🚀 Code Execution Engine — Starting...");12 logger.info("═══════════════════════════════════════════════");13 14 // Step 1: Verify Docker is available15 await verifyDocker();16 17 // Step 2: Build sandbox image if needed18 await buildSandboxImage();19 20 // Step 3: Ensure temp directory exists21 await ensureDir(config.TEMP_DIR);22 23 // Step 4: Start HTTP server24 app.listen(config.PORT, "0.0.0.0", () => {25 logger.info("───────────────────────────────────────────────");26 logger.info(` ✅ Server running on http://0.0.0.0:${config.PORT}`);27 logger.info(` 📋 Environment: ${config.NODE_ENV}`);28 logger.info(` 🐳 Sandbox image: ${config.SANDBOX_IMAGE}`);29 logger.info(` ⚡ Max concurrent: ${config.MAX_CONCURRENT}`);30 logger.info(` 🔒 Memory limit: ${config.MAX_MEMORY_LIMIT}MB`);31 logger.info(` ⏱️ Time limit: ${config.MAX_TIME_LIMIT}s`);32 logger.info(` 🌐 Languages: C, C++, Python`);33 logger.info("───────────────────────────────────────────────");34 logger.info(" API Endpoints:");35 logger.info(" GET /api/health → Health check");36 logger.info(" GET /api/languages → Supported languages");37 logger.info(" POST /api/execute → Run code");38 logger.info(" POST /api/judge → Judge with test cases");39 logger.info(" POST /api/batch-judge → Batch judge");40 logger.info("═══════════════════════════════════════════════");41 });42}43 44// Graceful shutdown45process.on("SIGTERM", () => {46 logger.info("🛑 SIGTERM received. Shutting down...");47 process.exit(0);48});49 50process.on("SIGINT", () => {51 logger.info("🛑 SIGINT received. Shutting down...");52 process.exit(0);53});54 55process.on("uncaughtException", (err) => {56 logger.error("Uncaught Exception:", err.message);57 process.exit(1);58});59 60process.on("unhandledRejection", (reason) => {61 logger.error("Unhandled Rejection:", reason);62 process.exit(1);63});64 65bootstrap().catch((err) => {66 logger.error("❌ Failed to start server:", err.message);67 process.exit(1);68});69 