sanket3280/code-execution
0
1/**2 * Unified Execution Logger3 * Tracks execution metrics and logs for debugging4 */5 6const fs = require('fs').promises;7const path = require('path');8 9class UnifiedExecutionLogger {10 constructor() {11 this.logDir = path.join(__dirname, '../logs/execution');12 this.ensureLogDir();13 }14 15 async ensureLogDir() {16 try {17 await fs.mkdir(this.logDir, { recursive: true });18 } catch (error) {19 console.error('Failed to create log directory:', error);20 }21 }22 23 /**24 * Log execution start25 */26 logExecutionStart(executionId, options) {27 const { language, testCaseCount, strategy } = options;28 console.log(`\n๐ Execution Started [${executionId}]`);29 console.log(` Strategy: ${strategy}`);30 console.log(` Language: ${language}`);31 console.log(` Test Cases: ${testCaseCount}`);32 console.log(` Timestamp: ${new Date().toISOString()}`);33 }34 35 /**36 * Log execution completion37 */38 logExecutionComplete(executionId, result) {39 const { summary, executionTime, strategy } = result;40 const icon = summary.passed === summary.total ? 'โ
' : 'โ ๏ธ';41 42 console.log(`${icon} Execution Complete [${executionId}]`);43 console.log(` Strategy: ${strategy}`);44 console.log(` Results: ${summary.passed}/${summary.total} passed`);45 console.log(` Time: ${executionTime}ms`);46 console.log(` Timestamp: ${new Date().toISOString()}\n`);47 }48 49 /**50 * Log execution error51 */52 logExecutionError(executionId, error, strategy) {53 console.error(`โ Execution Failed [${executionId}]`);54 console.error(` Strategy: ${strategy}`);55 console.error(` Error: ${error.message}`);56 console.error(` Timestamp: ${new Date().toISOString()}\n`);57 }58 59 /**60 * Log strategy fallback61 */62 logStrategyFallback(executionId, fromStrategy, toStrategy, reason) {63 console.warn(`๐ Strategy Fallback [${executionId}]`);64 console.warn(` From: ${fromStrategy}`);65 console.warn(` To: ${toStrategy}`);66 console.warn(` Reason: ${reason}`);67 console.warn(` Timestamp: ${new Date().toISOString()}\n`);68 }69 70 /**71 * Log test case result72 */73 logTestCaseResult(executionId, caseId, result) {74 const icon = result.pass ? 'โ' : 'โ';75 const status = result.status || (result.pass ? 'AC' : 'WA');76 console.log(` ${icon} Case ${caseId}: ${status} (${result.timeMs || 0}ms)`);77 }78 79 /**80 * Write detailed log to file81 */82 async writeDetailedLog(executionId, data) {83 try {84 const logFile = path.join(this.logDir, `${executionId}.json`);85 const logData = {86 executionId,87 timestamp: new Date().toISOString(),88 ...data89 };90 91 await fs.writeFile(logFile, JSON.stringify(logData, null, 2));92 } catch (error) {93 console.error('Failed to write detailed log:', error);94 }95 }96 97 /**98 * Log performance metrics99 */100 logPerformanceMetrics(executionId, metrics) {101 console.log(`\n๐ Performance Metrics [${executionId}]`);102 console.log(` Avg Time: ${metrics.avgTimeMs}ms`);103 console.log(` Max Time: ${metrics.maxTimeMs}ms`);104 console.log(` Avg Memory: ${metrics.avgMemoryKB}KB`);105 console.log(` Max Memory: ${metrics.maxMemoryKB}KB`);106 console.log(` Time Complexity: ${metrics.timeComplexity}`);107 console.log(` Space Complexity: ${metrics.spaceComplexity}\n`);108 }109 110 /**111 * Log Docker execution112 */113 logDockerExecution(executionId, options) {114 console.log(`๐ณ Docker Execution [${executionId}]`);115 console.log(` Image: ${options.dockerImage}`);116 console.log(` Memory: ${options.memoryLimit}MB`);117 console.log(` CPU: ${options.cpuLimit} cores`);118 console.log(` Timeout: ${options.timeout}ms`);119 }120 121 /**122 * Log HackerEarth API call123 */124 logHackerEarthExecution(executionId, options) {125 console.log(`๐ HackerEarth API [${executionId}]`);126 console.log(` Language: ${options.language}`);127 console.log(` Test Cases: ${options.testCaseCount}`);128 console.log(` Timeout: ${options.timeout}ms`);129 }130}131 132module.exports = new UnifiedExecutionLogger();133 