From 986944d232e7097adb3ca18acdd4529640946ae3 Mon Sep 17 00:00:00 2001 From: alisihab Date: Wed, 5 Feb 2025 16:01:15 +0100 Subject: [PATCH] feat: Add option to display message context (#365) --- src/main/java/nl/nn/testtool/Checkpoint.java | 9 +++ src/main/java/nl/nn/testtool/Report.java | 11 ++-- src/main/java/nl/nn/testtool/TestTool.java | 69 +++++++++++++++++++- 3 files changed, 83 insertions(+), 6 deletions(-) diff --git a/src/main/java/nl/nn/testtool/Checkpoint.java b/src/main/java/nl/nn/testtool/Checkpoint.java index 1defdbd6..8c8f44eb 100644 --- a/src/main/java/nl/nn/testtool/Checkpoint.java +++ b/src/main/java/nl/nn/testtool/Checkpoint.java @@ -65,6 +65,7 @@ public class Checkpoint implements Serializable, Cloneable { private String messageClassName; private String name; private String message; + private Map messageContext; private String encoding; private String streaming; private boolean waitingForStream = false; @@ -311,6 +312,14 @@ public String getMessage() { return message; } + public void setMessageContext(Map messageContext) { + this.messageContext = messageContext; + } + + public Map getMessageContext() { + return messageContext; + } + public void closeMessageCapturer() { try { if (messageCapturerWriter != null) { diff --git a/src/main/java/nl/nn/testtool/Report.java b/src/main/java/nl/nn/testtool/Report.java index 8e445d37..632f087a 100644 --- a/src/main/java/nl/nn/testtool/Report.java +++ b/src/main/java/nl/nn/testtool/Report.java @@ -273,7 +273,7 @@ protected void init() { threadsActiveCount++; } - protected T checkpoint(String childThreadId, String sourceClassName, String name, T message, + protected T checkpoint(String childThreadId, String sourceClassName, String name, T message, Map messageContext, StubableCode stubableCode, StubableCodeThrowsException stubableCodeThrowsException, Set matchingStubStrategies, int checkpointType, int levelChangeNextCheckpoint) { if (checkpointType == CheckpointType.THREAD_CREATEPOINT.toInt()) { @@ -317,7 +317,7 @@ protected T checkpoint(String childThreadId, String sourceClassName, String } } } - message = addCheckpoint(childThreadId, sourceClassName, name, message, stubableCode, stubableCodeThrowsException, + message = addCheckpoint(childThreadId, sourceClassName, name, message, messageContext, stubableCode, stubableCodeThrowsException, matchingStubStrategies, checkpointType, levelChangeNextCheckpoint); return message; } @@ -373,7 +373,7 @@ private void removeThreadCreatepoint(int index, String childThreadId) { } } - private T addCheckpoint(String childThreadId, String sourceClassName, String name, T message, + private T addCheckpoint(String childThreadId, String sourceClassName, String name, T message, Map messageContext, StubableCode stubableCode, StubableCodeThrowsException stubableCodeThrowsException, Set matchingStubStrategies, int checkpointType, int levelChangeNextCheckpoint) { String threadName = Thread.currentThread().getName(); @@ -440,7 +440,7 @@ private T addCheckpoint(String childThreadId, String sourceClassName, Strin logMaxMemoryUsage = false; } } else { - message = addCheckpoint(threadName, sourceClassName, name, message, stubableCode, + message = addCheckpoint(threadName, sourceClassName, name, message, messageContext, stubableCode, stubableCodeThrowsException, matchingStubStrategies, checkpointType, index, level); } Integer newLevel = level + levelChangeNextCheckpoint; @@ -455,10 +455,11 @@ private T addCheckpoint(String childThreadId, String sourceClassName, Strin } @SneakyThrows - private T addCheckpoint(String threadName, String sourceClassName, String name, T message, + private T addCheckpoint(String threadName, String sourceClassName, String name, T message, Map messageContext, StubableCode stubableCode, StubableCodeThrowsException stubableCodeThrowsException, Set matchingStubStrategies, int checkpointType, Integer index, Integer level) { Checkpoint checkpoint = new Checkpoint(this, threadName, sourceClassName, name, checkpointType, level); + checkpoint.setMessageContext(messageContext); if (testTool.getOpenTelemetryTracer() != null) { SpanBuilder checkpointSpanBuilder = testTool.getOpenTelemetryTracer().spanBuilder("checkpoint - " + name); for (Checkpoint checkpointInList: checkpoints) { diff --git a/src/main/java/nl/nn/testtool/TestTool.java b/src/main/java/nl/nn/testtool/TestTool.java index e84d708f..4b95e82f 100644 --- a/src/main/java/nl/nn/testtool/TestTool.java +++ b/src/main/java/nl/nn/testtool/TestTool.java @@ -319,6 +319,14 @@ public Tracer getOpenTelemetryTracer() { private T checkpoint(String correlationId, String childThreadId, String sourceClassName, String name, T message, StubableCode stubableCode, StubableCodeThrowsException stubableCodeThrowsException, Set matchingStubStrategies, int checkpointType, int levelChangeNextCheckpoint) { + return checkpoint(correlationId, childThreadId, sourceClassName, name, + message, null, stubableCode, stubableCodeThrowsException, + matchingStubStrategies, checkpointType, levelChangeNextCheckpoint); + } + + private T checkpoint(String correlationId, String childThreadId, String sourceClassName, String name, + T message, Map messageContext, StubableCode stubableCode, StubableCodeThrowsException stubableCodeThrowsException, + Set matchingStubStrategies, int checkpointType, int levelChangeNextCheckpoint) { boolean executeStubableCode = true; if (reportGeneratorEnabled) { Report report; @@ -353,7 +361,7 @@ private T checkpoint(String correlationId, String childThreadId, String sour continue; } executeStubableCode = false; - message = report.checkpoint(childThreadId, sourceClassName, name, message, stubableCode, + message = report.checkpoint(childThreadId, sourceClassName, name, message, messageContext, stubableCode, stubableCodeThrowsException, matchingStubStrategies, checkpointType, levelChangeNextCheckpoint); closeReportIfFinished(report); @@ -500,12 +508,23 @@ public T startpoint(String correlationId, String sourceClassName, String nam CheckpointType.STARTPOINT.toInt(), 1); } + public T startpoint(String correlationId, String sourceClassName, String name, T message, Map messageContext) { + return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, null, + CheckpointType.STARTPOINT.toInt(), 1); + } + public T startpoint(String correlationId, String sourceClassName, String name, T message, Set matchingStubStrategies) { return checkpoint(correlationId, null, sourceClassName, name, message, null, null, matchingStubStrategies, CheckpointType.STARTPOINT.toInt(), 1); } + public T startpoint(String correlationId, String sourceClassName, String name, T message, Map messageContext, + Set matchingStubStrategies) { + return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, matchingStubStrategies, + CheckpointType.STARTPOINT.toInt(), 1); + } + public T startpoint(String correlationId, String sourceClassName, String name, StubableCode stubableCode, Set matchingStubStrategies) { return checkpoint(correlationId, null, sourceClassName, name, null, stubableCode, null, matchingStubStrategies, @@ -538,12 +557,22 @@ public T endpoint(String correlationId, String sourceClassName, String name, return checkpoint(correlationId, null, sourceClassName, name, message, null, null, null, CheckpointType.ENDPOINT.toInt(), -1); } + + public T endpoint(String correlationId, String sourceClassName, String name, T message, Map messageContext) { + return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, null, + CheckpointType.ENDPOINT.toInt(), -1); + } public T endpoint(String correlationId, String sourceClassName, String name, T message, Set matchingStubStrategies) { return checkpoint(correlationId, null, sourceClassName, name, message, null, null, matchingStubStrategies, CheckpointType.ENDPOINT.toInt(), -1); } + public T endpoint(String correlationId, String sourceClassName, String name, T message, Map messageContext, + Set matchingStubStrategies) { + return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, matchingStubStrategies, + CheckpointType.ENDPOINT.toInt(), -1); + } public T endpoint(String correlationId, String sourceClassName, String name, StubableCode stubableCode, Set matchingStubStrategies) { @@ -615,12 +644,21 @@ public T inputpoint(String correlationId, String sourceClassName, String nam return checkpoint(correlationId, null, sourceClassName, name, message, null, null, null, CheckpointType.INPUTPOINT.toInt(), 0); } + public T inputpoint(String correlationId, String sourceClassName, String name, T message, Map messageContext) { + return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, null, + CheckpointType.INPUTPOINT.toInt(), 0); + } public T inputpoint(String correlationId, String sourceClassName, String name, T message, Set matchingStubStrategies) { return checkpoint(correlationId, null, sourceClassName, name, message, null, null, matchingStubStrategies, CheckpointType.INPUTPOINT.toInt(), 0); } + public T inputpoint(String correlationId, String sourceClassName, String name, T message, Map messageContext, + Set matchingStubStrategies) { + return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, matchingStubStrategies, + CheckpointType.INPUTPOINT.toInt(), 0); + } public T inputpoint(String correlationId, String sourceClassName, String name, StubableCode stubableCode, Set matchingStubStrategies) { @@ -653,12 +691,21 @@ public T outputpoint(String correlationId, String sourceClassName, String na return checkpoint(correlationId, null, sourceClassName, name, message, null, null, null, CheckpointType.OUTPUTPOINT.toInt(), 0); } + public T outputpoint(String correlationId, String sourceClassName, String name, T message, Map messageContext) { + return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, null, + CheckpointType.OUTPUTPOINT.toInt(), 0); + } public T outputpoint(String correlationId, String sourceClassName, String name, T message, Set matchingStubStrategies) { return checkpoint(correlationId, null, sourceClassName, name, message, null, null, matchingStubStrategies, CheckpointType.OUTPUTPOINT.toInt(), 0); } + public T outputpoint(String correlationId, String sourceClassName, String name, T message, Map messageContext, + Set matchingStubStrategies) { + return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, matchingStubStrategies, + CheckpointType.OUTPUTPOINT.toInt(), 0); + } public T outputpoint(String correlationId, String sourceClassName, String name, StubableCode stubableCode, Set matchingStubStrategies) { @@ -731,6 +778,10 @@ public T infopoint(String correlationId, String sourceClassName, String name return checkpoint(correlationId, null, sourceClassName, name, message, null, null, null, CheckpointType.INFOPOINT.toInt(), 0); } + public T infopoint(String correlationId, String sourceClassName, String name, T message, Map messageContext) { + return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, null, + CheckpointType.INFOPOINT.toInt(), 0); + } /** * Use abortpoint instead of endpoint in case an exception is thrown after a startpoint. The exception object can @@ -747,6 +798,10 @@ public T abortpoint(String correlationId, String sourceClassName, String nam return checkpoint(correlationId, null, sourceClassName, name, message, null, null, null, CheckpointType.ABORTPOINT.toInt(), -1); } + public T abortpoint(String correlationId, String sourceClassName, String name, T message, Map messageContext) { + return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, null, + CheckpointType.ABORTPOINT.toInt(), -1); + } /** * Set a marker in the report for a child thread to appear. This method @@ -779,6 +834,11 @@ public T threadStartpoint(String correlationId, String childThreadId, String return checkpoint(correlationId, childThreadId, sourceClassName, name, message, null, null, null, CheckpointType.THREAD_STARTPOINT.toInt(), 1); } + public T threadStartpoint(String correlationId, String childThreadId, String sourceClassName, + String name, T message, Map messageContext) { + return checkpoint(correlationId, childThreadId, sourceClassName, name, message, messageContext, null, null, null, + CheckpointType.THREAD_STARTPOINT.toInt(), 1); + } /** * Startpoint for a child thread. This method can be used when the name of @@ -794,11 +854,18 @@ public T threadStartpoint(String correlationId, String childThreadId, String public T threadStartpoint(String correlationId, String sourceClassName, String name, T message) { return threadStartpoint(correlationId, Thread.currentThread().getName(), sourceClassName, name, message); } + public T threadStartpoint(String correlationId, String sourceClassName, String name, T message, Map messageContext) { + return threadStartpoint(correlationId, Thread.currentThread().getName(), sourceClassName, name, message, messageContext); + } public T threadEndpoint(String correlationId, String sourceClassName, String name, T message) { return checkpoint(correlationId, null, sourceClassName, name, message, null, null, null, CheckpointType.THREAD_ENDPOINT.toInt(), -1); } + public T threadEndpoint(String correlationId, String sourceClassName, String name, T message, Map messageContext) { + return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, null, + CheckpointType.THREAD_ENDPOINT.toInt(), -1); + } /** * Mark all threads and message capturers as finished and close the report, hence write the report to storage. When