Skip to content

Commit a3499e6

Browse files
authored
add trace id to error response messages (#473)
* add trace id to error response messages Signed-off-by: lukelee-sl <[email protected]> * add newline Signed-off-by: lukelee-sl <[email protected]> * fix assertions to account for error message Signed-off-by: lukelee-sl <[email protected]> * address review comments Signed-off-by: lukelee-sl <[email protected]> * update JsonRpcError to use requestId if passed into the constructor Signed-off-by: lukelee-sl <[email protected]> Signed-off-by: lukelee-sl <[email protected]>
1 parent 9ebd12a commit a3499e6

File tree

5 files changed

+16
-9
lines changed

5 files changed

+16
-9
lines changed

packages/relay/src/lib/errors/JsonRpcError.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,16 @@
1818
*
1919
*/
2020

21+
const REQUEST_ID_STRING = `Request ID: `;
2122
export class JsonRpcError {
2223
public code: number;
2324
public message: string;
2425
public name: string;
2526

26-
constructor(args: { name: string, code: number, message: string }) {
27+
constructor(args: { name: string, code: number, message: string }, requestId?: string) {
2728
this.code = args.code;
2829
this.name = args.name;
29-
this.message = args.message;
30+
this.message = requestId ? `[${REQUEST_ID_STRING}${requestId}] ` + args.message : args.message;
3031
}
3132
}
3233

packages/server/src/server.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,22 +146,28 @@ const logAndHandleResponse = async (methodName, methodFunction) => {
146146
ms = Date.now() - start;
147147
methodResponseHistogram.labels(methodName, status).observe(ms);
148148
logger.info(`${messagePrefix} ${status} ${ms} ms `);
149+
if (response instanceof JsonRpcError) {
150+
logger.error(`returning error to sender: ${requestIdPrefix} ${response.message}`)
151+
return new JsonRpcError({name: response.name, code: response.code, message: response.message}, requestId);
152+
}
149153
return response;
150154
} catch (e: any) {
151155
ms = Date.now() - start;
152156
methodResponseHistogram.labels(methodName, responseInternalErrorCode).observe(ms);
153157
logger.error(e, `${messagePrefix} ${responseInternalErrorCode} ${ms} ms`);
154158

159+
let error = predefined.INTERNAL_ERROR;
155160
if (e instanceof MirrorNodeClientError) {
156161
if (e.isTimeout()) {
157-
return predefined.REQUEST_TIMEOUT;
162+
error = predefined.REQUEST_TIMEOUT;
158163
}
159164
}
160165
else if (e instanceof JsonRpcError) {
161-
return e;
166+
error = e;
162167
}
163168

164-
return predefined.INTERNAL_ERROR;
169+
logger.error(`returning error to sender: ${requestIdPrefix} ${error.message}`)
170+
return new JsonRpcError({name: error.name, code: error.code, message:error.message}, requestId);
165171
}
166172
};
167173

packages/server/tests/helpers/assertions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export default class Assertions {
4444

4545
static unsupportedResponse = (resp: any) => {
4646
expect(resp.error.code).to.eq(-32601);
47-
expect(resp.error.message).to.eq('Unsupported JSON-RPC method');
47+
expect(resp.error.message.endsWith('Unsupported JSON-RPC method')).to.be.true;
4848
};
4949

5050
static expectedError = () => {
@@ -201,7 +201,7 @@ export default class Assertions {
201201
expect(err).to.have.property('body');
202202

203203
const parsedError = JSON.parse(err.body);
204-
expect(parsedError.error.message).to.be.equal(expectedError.message);
204+
expect(parsedError.error.message.endsWith(expectedError.message)).to.be.true;
205205
expect(parsedError.error.code).to.be.equal(expectedError.code);
206206
}
207207

packages/server/tests/integration/server.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ class BaseTest {
350350
expect(response.data.error).to.have.property('code');
351351
expect(response.data.error.code).to.be.equal(code);
352352
expect(response.data.error).to.have.property('message');
353-
expect(response.data.error.message).to.be.equal(message);
353+
expect(response.data.error.message.endsWith(message)).to.be.true;
354354
if (name) {
355355
expect(response.data.error).to.have.property('name');
356356
expect(response.data.error.name).to.be.equal(name);

packages/server/tests/postman.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -604,7 +604,7 @@
604604
" var response = pm.response.json();",
605605
" pm.expect(response.error.code).to.equal(-32601);",
606606
" pm.expect(response.error.name).to.equal(\"Method not found\");",
607-
" pm.expect(response.error.message).to.equal(\"Unsupported JSON-RPC method\");",
607+
" pm.expect(response.error.message.endsWith(\"Unsupported JSON-RPC method\")).to.be.true;",
608608
" pm.expect(response.id).to.equal(\"test_id\");",
609609
" pm.expect(response.jsonrpc).to.equal(\"2.0\");",
610610
"});",

0 commit comments

Comments
 (0)