CoolFace
Apppublic

Ratan1870/code-execution

sourceHugging Faceupdated 8mo agoView on Hugging Face
0likes
index.js72 linesDownload Raw Back to src
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: Check execution mode15  if (config.EXECUTION_MODE === "process") {16    logger.info("🔧 Running in PROCESS mode (no Docker required)");17  } else {18    // Docker mode: verify Docker is available and build sandbox image19    await verifyDocker();20    await buildSandboxImage();21  }22 23  // Step 2: Ensure temp directory exists24  await ensureDir(config.TEMP_DIR);25 26  // Step 3: Start HTTP server27  app.listen(config.PORT, "0.0.0.0", () => {28    logger.info("───────────────────────────────────────────────");29    logger.info(`  ✅ Server running on http://0.0.0.0:${config.PORT}`);30    logger.info(`  📋 Environment:    ${config.NODE_ENV}`);31    logger.info(`  🐳 Sandbox image:  ${config.SANDBOX_IMAGE}`);32    logger.info(`  ⚡ Max concurrent: ${config.MAX_CONCURRENT}`);33    logger.info(`  🔒 Memory limit:   ${config.MAX_MEMORY_LIMIT}MB`);34    logger.info(`  ⏱️  Time limit:     ${config.MAX_TIME_LIMIT}s`);35    logger.info(`  🌐 Languages:      C, C++, Python`);36    logger.info("───────────────────────────────────────────────");37    logger.info("  API Endpoints:");38    logger.info("    GET  /api/health      → Health check");39    logger.info("    GET  /api/languages   → Supported languages");40    logger.info("    POST /api/execute     → Run code");41    logger.info("    POST /api/judge       → Judge with test cases");42    logger.info("    POST /api/batch-judge → Batch judge");43    logger.info("═══════════════════════════════════════════════");44  });45}46 47// Graceful shutdown48process.on("SIGTERM", () => {49  logger.info("🛑 SIGTERM received. Shutting down...");50  process.exit(0);51});52 53process.on("SIGINT", () => {54  logger.info("🛑 SIGINT received. Shutting down...");55  process.exit(0);56});57 58process.on("uncaughtException", (err) => {59  logger.error("Uncaught Exception:", err.message);60  process.exit(1);61});62 63process.on("unhandledRejection", (reason) => {64  logger.error("Unhandled Rejection:", reason);65  process.exit(1);66});67 68bootstrap().catch((err) => {69  logger.error("❌ Failed to start server:", err.message);70  process.exit(1);71});72