Skip to content

Commit d4f556f

Browse files
author
Isuru Wijesiri
committed
Update transaction counting
1 parent 59ba871 commit d4f556f

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

components/org.wso2.micro.integrator.initializer/src/main/java/org/wso2/micro/integrator/initializer/handler/transaction/TransactionCountHandler.java

+34-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.apache.synapse.core.axis2.Axis2MessageContext;
2727
import org.wso2.micro.integrator.initializer.handler.DataHolder;
2828
import org.wso2.micro.integrator.initializer.handler.transaction.store.TransactionStore;
29+
import org.wso2.micro.integrator.initializer.utils.Constants;
2930

3031
import java.util.concurrent.ExecutorService;
3132
import java.util.concurrent.RejectedExecutionException;
@@ -45,7 +46,17 @@ public TransactionCountHandler(ExecutorService executor) {
4546
@Override
4647
public boolean handleRequestInFlow(MessageContext messageContext) {
4748
try {
48-
transactionCountExecutor.execute(() -> handleTransactionCount(messageContext));
49+
org.apache.axis2.context.MessageContext axis2MessageContext =
50+
((Axis2MessageContext) messageContext).getAxis2MessageContext();
51+
52+
// Setting this property to identify request-response pairs
53+
axis2MessageContext.setProperty(Constants.IS_THERE_ASSOCIATED_INCOMING_REQUEST, true);
54+
55+
// Counting message received via an open WebSocket
56+
String transport = axis2MessageContext.getIncomingTransportName();
57+
if (transport.equals(Constants.TRANSPORT_WS) || transport.equals(Constants.TRANSPORT_WSS)){
58+
transactionCountExecutor.execute(() -> handleTransactionCount(messageContext));
59+
}
4960
} catch (RejectedExecutionException e) {
5061
LOG.error("Transaction could not be counted.", e);
5162
}
@@ -54,6 +65,19 @@ public boolean handleRequestInFlow(MessageContext messageContext) {
5465

5566
@Override
5667
public boolean handleRequestOutFlow(MessageContext messageContext) {
68+
try {
69+
org.apache.axis2.context.MessageContext axis2MessageContext =
70+
((Axis2MessageContext) messageContext).getAxis2MessageContext();
71+
Object isThereAnAssociatedIncomingRequest = axis2MessageContext.getProperty(
72+
Constants.IS_THERE_ASSOCIATED_INCOMING_REQUEST);
73+
74+
// Counting outgoing messages that are not related to any request-response pair
75+
if (isThereAnAssociatedIncomingRequest == null) {
76+
transactionCountExecutor.execute(() -> handleTransactionCount(messageContext));
77+
}
78+
} catch (RejectedExecutionException e) {
79+
LOG.error("Transaction could not be counted.", e);
80+
}
5781
return true;
5882
}
5983

@@ -64,6 +88,15 @@ public boolean handleResponseInFlow(MessageContext messageContext) {
6488

6589
@Override
6690
public boolean handleResponseOutFlow(MessageContext messageContext) {
91+
org.apache.axis2.context.MessageContext axis2MessageContext =
92+
((Axis2MessageContext) messageContext).getAxis2MessageContext();
93+
Object isThereAnAssociatedIncomingRequest = axis2MessageContext.getProperty(
94+
Constants.IS_THERE_ASSOCIATED_INCOMING_REQUEST);
95+
96+
// Counting request-response pairs
97+
if (isThereAnAssociatedIncomingRequest instanceof Boolean) {
98+
transactionCountExecutor.execute(() -> handleTransactionCount(messageContext));
99+
}
67100
return true;
68101
}
69102

components/org.wso2.micro.integrator.initializer/src/main/java/org/wso2/micro/integrator/initializer/utils/Constants.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -76,5 +76,7 @@ public class Constants {
7676
public static final String HTTPS_LISTENER_PORT = "transport.https.listener.parameter.port";
7777
public static final String HTTP_LISTENER_PORT = "transport.http.listener.parameter.port";
7878
public static final String SERVER_PORT_OFFSET = "portOffset";
79-
79+
public static final String IS_THERE_ASSOCIATED_INCOMING_REQUEST = "is_there_incoming_request";
80+
public static final String TRANSPORT_WS = "ws";
81+
public static final String TRANSPORT_WSS = "wss";
8082
}

0 commit comments

Comments
 (0)