Fix script execution logs being lost
- Add ScriptExecutionError class that preserves captured logs/queries - IsolatedScriptExecutor: throw ScriptExecutionError with accumulated logs instead of plain Error on script failure - ScriptExecutor (Python): same fix for Python execution errors - testEndpoint: return captured logs/queries on script errors - dynamicApiController: correctly extract scriptResult.result instead of stuffing entire IsolatedExecutionResult into rows; include logs in detailed_response output Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -3,7 +3,7 @@ import { ApiKeyRequest } from '../middleware/apiKey';
|
||||
import { mainPool } from '../config/database';
|
||||
import { sqlExecutor } from '../services/SqlExecutor';
|
||||
import { scriptExecutor } from '../services/ScriptExecutor';
|
||||
import { EndpointParameter, ScriptQuery } from '../types';
|
||||
import { EndpointParameter, ScriptQuery, ScriptExecutionError } from '../types';
|
||||
|
||||
export const executeDynamicEndpoint = async (req: ApiKeyRequest, res: Response) => {
|
||||
const startTime = Date.now();
|
||||
@@ -202,9 +202,11 @@ export const executeDynamicEndpoint = async (req: ApiKeyRequest, res: Response)
|
||||
});
|
||||
|
||||
result = {
|
||||
rows: scriptResult,
|
||||
rows: scriptResult.result,
|
||||
rowCount: 0,
|
||||
executionTime: 0,
|
||||
scriptLogs: scriptResult.logs,
|
||||
scriptQueries: scriptResult.queries,
|
||||
};
|
||||
} else {
|
||||
// Execute SQL query
|
||||
@@ -241,6 +243,8 @@ export const executeDynamicEndpoint = async (req: ApiKeyRequest, res: Response)
|
||||
data: result.rows,
|
||||
rowCount: result.rowCount,
|
||||
executionTime: result.executionTime,
|
||||
...(result.scriptLogs && result.scriptLogs.length > 0 ? { logs: result.scriptLogs } : {}),
|
||||
...(result.scriptQueries && result.scriptQueries.length > 0 ? { queries: result.scriptQueries } : {}),
|
||||
}
|
||||
: result.rows;
|
||||
|
||||
@@ -267,9 +271,12 @@ export const executeDynamicEndpoint = async (req: ApiKeyRequest, res: Response)
|
||||
} catch (error: any) {
|
||||
console.error('Dynamic API execution error:', error);
|
||||
|
||||
const errorResponse = {
|
||||
const isScriptError = error instanceof ScriptExecutionError;
|
||||
const errorResponse: any = {
|
||||
success: false,
|
||||
error: error.message,
|
||||
...(isScriptError && error.logs.length > 0 ? { logs: error.logs } : {}),
|
||||
...(isScriptError && error.queries.length > 0 ? { queries: error.queries } : {}),
|
||||
};
|
||||
|
||||
// Log error if needed
|
||||
|
||||
Reference in New Issue
Block a user