Search in sources :

Example 1 with StatisticsLog

use of org.apache.synapse.aspects.flow.statistics.data.raw.StatisticsLog 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)

Example 2 with StatisticsLog

use of org.apache.synapse.aspects.flow.statistics.data.raw.StatisticsLog in project wso2-synapse by wso2.

the class SpanTagger method setSpanTags.

/**
 * Sets tags to the span which is contained in the provided span wrapper, from information acquired from the
 * given basic statistic data unit.
 * @param spanWrapper               Span wrapper that contains the target span.
 */
public static void setSpanTags(SpanWrapper spanWrapper) {
    StatisticsLog openStatisticsLog = new StatisticsLog(spanWrapper.getStatisticDataUnit());
    Span span = spanWrapper.getSpan();
    if (OpenTracingManagerHolder.isCollectingPayloads() || OpenTracingManagerHolder.isCollectingProperties()) {
        if (OpenTracingManagerHolder.isCollectingPayloads()) {
            if (openStatisticsLog.getBeforePayload() != null) {
                span.setTag("beforePayload", openStatisticsLog.getBeforePayload());
            }
            StatisticDataUnit statisticDataUnit = spanWrapper.getCloseEventStatisticDataUnit();
            if (statisticDataUnit != null) {
                if (statisticDataUnit.getPayload() != null) {
                    span.setTag("afterPayload", statisticDataUnit.getPayload());
                }
            } else if (openStatisticsLog.getBeforePayload() != null) {
                // This means a close event hasn't been triggered so payload is equal to before payload
                span.setTag("afterPayload", openStatisticsLog.getBeforePayload());
            }
        }
        if (OpenTracingManagerHolder.isCollectingProperties()) {
            if (spanWrapper.getStatisticDataUnit().getContextPropertyMap() != null) {
                span.setTag("beforeContextPropertyMap", spanWrapper.getStatisticDataUnit().getContextPropertyMap().toString());
            }
            if (spanWrapper.getCloseEventStatisticDataUnit() != null) {
                if (spanWrapper.getCloseEventStatisticDataUnit().getContextPropertyMap() != null) {
                    span.setTag("afterContextPropertyMap", spanWrapper.getCloseEventStatisticDataUnit().getContextPropertyMap().toString());
                }
            } else if (openStatisticsLog.getContextPropertyMap() != null) {
                span.setTag("afterContextPropertyMap", openStatisticsLog.getContextPropertyMap().toString());
            }
            if (spanWrapper.getCloseEventStatisticDataUnit() != null && spanWrapper.getCloseEventStatisticDataUnit().getPropertyValue() != null) {
                span.setTag("propertyMediatorValue", spanWrapper.getCloseEventStatisticDataUnit().getPropertyValue());
            }
        }
    }
    if (openStatisticsLog.getComponentName() != null) {
        span.setTag("componentName", openStatisticsLog.getComponentName());
    }
    if (openStatisticsLog.getComponentTypeToString() != null) {
        span.setTag("componentType", openStatisticsLog.getComponentTypeToString());
    }
    span.setTag("threadId", Thread.currentThread().getId());
    if (openStatisticsLog.getComponentId() != null) {
        span.setTag("componentId", openStatisticsLog.getComponentId());
    }
    if (openStatisticsLog.getHashCode() != null) {
        span.setTag("hashcode", openStatisticsLog.getHashCode());
    }
    if (openStatisticsLog.getTransportHeaderMap() != null) {
        span.setTag("Transport Headers", openStatisticsLog.getTransportHeaderMap().toString());
    }
    if (openStatisticsLog.getStatusCode() != null) {
        span.setTag("Status code", openStatisticsLog.getStatusCode());
    }
    if (openStatisticsLog.getStatusDescription() != null) {
        span.setTag("Status description", openStatisticsLog.getStatusDescription());
    }
    if (openStatisticsLog.getEndpoint() != null) {
        span.setTag("Endpoint", String.valueOf(openStatisticsLog.getEndpoint().getJsonRepresentation()));
    }
}
Also used : StatisticDataUnit(org.apache.synapse.aspects.flow.statistics.data.raw.StatisticDataUnit) StatisticsLog(org.apache.synapse.aspects.flow.statistics.data.raw.StatisticsLog) Span(io.opentracing.Span)

Example 3 with StatisticsLog

use of org.apache.synapse.aspects.flow.statistics.data.raw.StatisticsLog in project wso2-synapse by wso2.

the class PublishingEventTest method init.

/**
 * Initializing PublishingEvent before tests.
 */
@BeforeClass
public static void init() {
    StatisticDataUnit statisticDataUnit = new StatisticDataUnit();
    statisticDataUnit.setTime(START_TIME);
    PROPERTY_MAP.put("1", new Integer(1));
    statisticDataUnit.setContextPropertyMap(PROPERTY_MAP);
    StatisticsLog statisticsLog = new StatisticsLog(statisticDataUnit);
    statisticsLog.setComponentType(ComponentType.ENDPOINT);
    statisticsLog.setComponentName(COMPONENT_NAME);
    statisticsLog.setComponentId(COMPONENT_ID);
    statisticsLog.setEndTime(END_TIME);
    statisticsLog.setChildren(Arrays.asList(CHILDREN));
    statisticsLog.incrementNoOfFaults();
    statisticsLog.setHashCode(HASHCODE);
    publishingEvent = new PublishingEvent(FLOW_ID, COMPONENT_INDEX, statisticsLog, ENTRY_POINT, ENTRY_POINT_HASH_CODE);
    publishingEvent.setBeforePayload(BEFORE_PAYLOAD);
    publishingEvent.setAfterPayload(AFTER_PAYLOAD);
}
Also used : StatisticDataUnit(org.apache.synapse.aspects.flow.statistics.data.raw.StatisticDataUnit) StatisticsLog(org.apache.synapse.aspects.flow.statistics.data.raw.StatisticsLog) BeforeClass(org.junit.BeforeClass)

Aggregations

StatisticsLog (org.apache.synapse.aspects.flow.statistics.data.raw.StatisticsLog)3 StatisticDataUnit (org.apache.synapse.aspects.flow.statistics.data.raw.StatisticDataUnit)2 Span (io.opentracing.Span)1 HashMap (java.util.HashMap)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 BeforeClass (org.junit.BeforeClass)1