Search in sources :

Example 1 with PublishingEvent

use of org.apache.synapse.aspects.flow.statistics.publishing.PublishingEvent in project wso2-synapse by wso2.

the class TracingDataCollectionHelper method createPublishingFlow.

public static PublishingFlow createPublishingFlow(List<StatisticsLog> messageFlowLogs) {
    // Data structure using to serialize thr statistic data while publishing.
    PublishingFlow publishingFlow = new PublishingFlow();
    // Payload map which contains all the payloads of the message flow.
    Map<String, PublishingPayload> payloadMap = new HashMap<>();
    // Constants
    final String REFER = "#REFER:";
    final String BEFORE = "before-";
    final String AFTER = "after-";
    // 8th attribute setting @PublishingEvent
    final Integer BEFORE_PAYLOAD = 8;
    // 9th attribute setting @PublishingEvent
    final Integer AFTER_PAYLOAD = 9;
    String entryPoint = messageFlowLogs.get(0).getComponentName();
    String flowId = messageFlowLogs.get(0).getMessageFlowId();
    Integer entrypointHashcode = messageFlowLogs.get(0).getHashCode();
    boolean isTracingEnabledForFlow = messageFlowLogs.get(0).isTracingEnabled();
    for (int index = 0; index < messageFlowLogs.size(); index++) {
        StatisticsLog currentStatLog = messageFlowLogs.get(index);
        if (currentStatLog == null) {
            continue;
        }
        // Add each event to Publishing Flow
        publishingFlow.addEvent(new PublishingEvent(flowId, index, currentStatLog, entryPoint, entrypointHashcode));
        // Skip the rest of things, if message tracing is disabled
        if (!RuntimeStatisticCollector.isCollectingPayloads()) {
            continue;
        }
        // Skip flow is tracing is not enabled for the flow (from UI)
        if (!isTracingEnabledForFlow) {
            continue;
        }
        // Update children's immediateParent index
        List<Integer> childrenOfCurrent = currentStatLog.getChildren();
        for (Integer child : childrenOfCurrent) {
            messageFlowLogs.get(child).setImmediateParent(currentStatLog.getCurrentIndex());
        }
        if (currentStatLog.getBeforePayload() != null && currentStatLog.getAfterPayload() == null) {
            currentStatLog.setAfterPayload(currentStatLog.getBeforePayload());
        }
        if (currentStatLog.getBeforePayload() == null) {
            int parentIndex = currentStatLog.getImmediateParent();
            StatisticsLog parentStatLog = messageFlowLogs.get(parentIndex);
            if (parentStatLog.getAfterPayload().startsWith(REFER)) {
                // Parent also referring to after-payload
                currentStatLog.setBeforePayload(parentStatLog.getAfterPayload());
                currentStatLog.setAfterPayload(parentStatLog.getAfterPayload());
                String referringIndex = parentStatLog.getAfterPayload().split(":")[1];
                payloadMap.get(AFTER + referringIndex).addEvent(new PublishingPayloadEvent(index, BEFORE_PAYLOAD));
                payloadMap.get(AFTER + referringIndex).addEvent(new PublishingPayloadEvent(index, AFTER_PAYLOAD));
            } else {
                // Create a new after-payload reference
                currentStatLog.setBeforePayload(REFER + parentIndex);
                currentStatLog.setAfterPayload(REFER + parentIndex);
                payloadMap.get(AFTER + parentIndex).addEvent(new PublishingPayloadEvent(index, BEFORE_PAYLOAD));
                payloadMap.get(AFTER + parentIndex).addEvent(new PublishingPayloadEvent(index, AFTER_PAYLOAD));
            }
        } else {
            // For content altering components
            PublishingPayload publishingPayloadBefore = new PublishingPayload();
            publishingPayloadBefore.setPayload(currentStatLog.getBeforePayload());
            publishingPayloadBefore.addEvent(new PublishingPayloadEvent(index, BEFORE_PAYLOAD));
            payloadMap.put(BEFORE + index, publishingPayloadBefore);
            PublishingPayload publishingPayloadAfter = new PublishingPayload();
            publishingPayloadAfter.setPayload(currentStatLog.getAfterPayload());
            publishingPayloadAfter.addEvent(new PublishingPayloadEvent(index, AFTER_PAYLOAD));
            payloadMap.put(AFTER + index, publishingPayloadAfter);
        }
    }
    publishingFlow.setMessageFlowId(flowId);
    // Move all payloads to publishingFlow object
    publishingFlow.setPayloads(payloadMap.values());
    return publishingFlow;
}
Also used : PublishingFlow(org.apache.synapse.aspects.flow.statistics.publishing.PublishingFlow) HashMap(java.util.HashMap) PublishingPayloadEvent(org.apache.synapse.aspects.flow.statistics.publishing.PublishingPayloadEvent) PublishingEvent(org.apache.synapse.aspects.flow.statistics.publishing.PublishingEvent) StatisticsLog(org.apache.synapse.aspects.flow.statistics.data.raw.StatisticsLog) PublishingPayload(org.apache.synapse.aspects.flow.statistics.publishing.PublishingPayload)

Aggregations

HashMap (java.util.HashMap)1 StatisticsLog (org.apache.synapse.aspects.flow.statistics.data.raw.StatisticsLog)1 PublishingEvent (org.apache.synapse.aspects.flow.statistics.publishing.PublishingEvent)1 PublishingFlow (org.apache.synapse.aspects.flow.statistics.publishing.PublishingFlow)1 PublishingPayload (org.apache.synapse.aspects.flow.statistics.publishing.PublishingPayload)1 PublishingPayloadEvent (org.apache.synapse.aspects.flow.statistics.publishing.PublishingPayloadEvent)1