From 8ac43fdbac952b258aac90a907b9a9727de68a53 Mon Sep 17 00:00:00 2001 From: Para Dox Date: Sun, 1 Jun 2025 20:59:56 +0700 Subject: [PATCH] log primary and secondary responses --- split-proxy/config.js | 1 + split-proxy/example.env | 3 +++ split-proxy/proxy.js | 49 +++++++++++++++++++++++++++++++++++------ 3 files changed, 46 insertions(+), 7 deletions(-) diff --git a/split-proxy/config.js b/split-proxy/config.js index aa1b6145..f7b363f1 100644 --- a/split-proxy/config.js +++ b/split-proxy/config.js @@ -18,6 +18,7 @@ const config = { // Logging logMismatches: process.env.LOG_MISMATCHES !== 'false', // default true + logAllMismatchedResponses: process.env.LOG_ALL_MISMATCHED_RESPONSES === 'true', // default false // Server port: parseInt(process.env.PORT || '8545', 10), diff --git a/split-proxy/example.env b/split-proxy/example.env index d8daea37..77f70bcc 100644 --- a/split-proxy/example.env +++ b/split-proxy/example.env @@ -17,6 +17,9 @@ SIZE_DIFF_THRESHOLD=100 # Whether to log mismatches LOG_MISMATCHES=true +# Whether to log full responses for ALL mismatches (not just size differences) +LOG_ALL_MISMATCHED_RESPONSES=false + # Server port PORT=8545 diff --git a/split-proxy/proxy.js b/split-proxy/proxy.js index d9b9eb92..570916e7 100644 --- a/split-proxy/proxy.js +++ b/split-proxy/proxy.js @@ -423,30 +423,65 @@ class RPCProxy { const logEntry = { requestId, method: requestBody.method, + request: requestBody, // Include the original request for context mismatches, streamEndpoint: this.streamEndpoint, compareEndpoint: this.compareEndpoint, }; - // Include full compare response if size differs significantly - if (sizeDiff > config.sizeDiffThreshold) { + // Include full responses if there's any mismatch (not just size) + // This helps debug status code mismatches, timeouts, etc. + const shouldLogResponses = sizeDiff > config.sizeDiffThreshold || + streamResponse.statusCode !== compareResponse.statusCode || + (config.logAllMismatchedResponses === true); + + if (shouldLogResponses) { try { - logEntry.compareResponseData = JSON.parse(compareResponse.data); - logEntry.streamResponseData = JSON.parse(streamResponse.data); + // Try to parse as JSON for better readability + logEntry.streamResponse = { + statusCode: streamResponse.statusCode, + size: streamResponse.size, + data: streamResponse.data ? JSON.parse(streamResponse.data) : null + }; + logEntry.compareResponse = { + statusCode: compareResponse.statusCode, + size: compareResponse.size, + data: compareResponse.data ? JSON.parse(compareResponse.data) : null + }; } catch (e) { // If not valid JSON, include raw data - logEntry.compareResponseData = compareResponse.data; - logEntry.streamResponseData = streamResponse.data; + logEntry.streamResponse = { + statusCode: streamResponse.statusCode, + size: streamResponse.size, + data: streamResponse.data + }; + logEntry.compareResponse = { + statusCode: compareResponse.statusCode, + size: compareResponse.size, + data: compareResponse.data + }; } + + // Log a summary for easier reading + logger.warn({ + requestId, + method: requestBody.method, + mismatchTypes: mismatches.map(m => m.type), + streamEndpoint: this.streamEndpoint, + compareEndpoint: this.compareEndpoint, + }, 'Response mismatch detected - full details below'); } - logger.warn(logEntry, 'Response mismatch detected'); + // Log the full entry with all details + logger.warn(logEntry, 'Response mismatch details'); } else { logger.debug({ requestId, method: requestBody.method, streamLatency: streamResponse.latency, compareLatency: compareResponse.latency, + streamSize: streamResponse.size, + compareSize: compareResponse.size, }, 'Responses match'); } }