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;
}
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()));
}
}
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);
}
Aggregations