From 5b8827e729c0235909e634585895d6b7dee2250c Mon Sep 17 00:00:00 2001 From: accius Date: Sun, 1 Feb 2026 00:53:40 -0500 Subject: [PATCH] Update server.js --- iturhfprop-service/server.js | 50 +++++++++++++++++------------------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/iturhfprop-service/server.js b/iturhfprop-service/server.js index 85e3c8a..116ec9b 100644 --- a/iturhfprop-service/server.js +++ b/iturhfprop-service/server.js @@ -210,6 +210,14 @@ async function runPrediction(params) { const inputPath = path.join(TEMP_DIR, `input_${id}.txt`); const outputPath = path.join(TEMP_DIR, `output_${id}.txt`); + // Ensure temp dir exists + if (!fs.existsSync(TEMP_DIR)) { + fs.mkdirSync(TEMP_DIR, { recursive: true }); + } + + let execStdout = ''; + let execStderr = ''; + try { // Generate input file const inputContent = generateInputFile(params); @@ -225,39 +233,21 @@ async function runPrediction(params) { console.log(`[ITURHFProp] Command: ${cmd}`); try { - const result = execSync(cmd, { + execStdout = execSync(cmd, { timeout: 30000, // 30 second timeout encoding: 'utf8', env: { ...process.env, LD_LIBRARY_PATH: '/opt/iturhfprop:' + (process.env.LD_LIBRARY_PATH || '') } }); - console.log(`[ITURHFProp] stdout: ${result}`); + console.log(`[ITURHFProp] stdout: ${execStdout}`); } catch (execError) { - console.error('[ITURHFProp] Execution failed!'); + execStderr = execError.stderr?.toString() || ''; + execStdout = execError.stdout?.toString() || ''; + console.error('[ITURHFProp] Execution error!'); console.error('[ITURHFProp] Exit code:', execError.status); - console.error('[ITURHFProp] stderr:', execError.stderr?.toString() || 'none'); - console.error('[ITURHFProp] stdout:', execError.stdout?.toString() || 'none'); - console.error('[ITURHFProp] Error:', execError.message); + console.error('[ITURHFProp] stderr:', execStderr); + console.error('[ITURHFProp] stdout:', execStdout); - // Try to get any output that was generated - if (!fs.existsSync(outputPath)) { - // Check if binary exists and is executable - try { - const stats = fs.statSync(ITURHFPROP_PATH); - console.log(`[ITURHFProp] Binary exists, size: ${stats.size}, mode: ${stats.mode.toString(8)}`); - } catch (e) { - console.error(`[ITURHFProp] Binary not found at ${ITURHFPROP_PATH}`); - } - - // Check data directory - try { - const dataFiles = fs.readdirSync(ITURHFPROP_DATA + '/Data').slice(0, 5); - console.log(`[ITURHFProp] Data dir contains: ${dataFiles.join(', ')}...`); - } catch (e) { - console.error(`[ITURHFProp] Data dir error: ${e.message}`); - } - - throw new Error(`ITURHFProp failed: ${execError.stderr?.toString() || execError.message}`); - } + // Don't throw - try to read output anyway } const elapsed = Date.now() - startTime; @@ -279,6 +269,9 @@ async function runPrediction(params) { // Parse output const results = parseOutputFile(outputPath); results.elapsed = elapsed; + results.execStdout = execStdout; + results.execStderr = execStderr; + results.inputContent = inputContent; results.params = { txLat: params.txLat, txLon: params.txLon, @@ -656,7 +649,10 @@ app.get('/api/bands', async (req, res) => { debug: { rawOutput: results.raw, freqCount: results.frequencies.length, - parsedFreqs: results.frequencies + parsedFreqs: results.frequencies, + execStdout: results.execStdout, + execStderr: results.execStderr, + inputContent: results.inputContent?.substring(0, 1000) }, timestamp: new Date().toISOString() });