/* * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. licenses this file to you under the Apache License, * Version 2.0 (the "License"); you may not use this file except * in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.synapse.aspects.flow.statistics.data.raw; import org.apache.synapse.aspects.ComponentType; import org.apache.synapse.aspects.flow.statistics.util.StatisticsConstants; import java.util.LinkedList; import java.util.List; import java.util.Map; /** * StatisticsLog holds statistics logs during statistic collection. When message passes through each * mediator,API,sequence etc. StatisticsLog will be created for each and every component. */ public class StatisticsLog { /** * Parent Index of this statistic Log. */ private int parentIndex; /** * Number of faults in the component. */ private int noOfFaults = 0; /** * number of branches currently referring this component as a parent. */ private int numberOpenTimes = 1; /** * Index of the component position in the message flow. */ private int currentIndex; /** * Start time of the event. */ private long startTime = -1; /** * endTime of the Event. */ private long endTime = 0; /** * Is this component is a FlowContinuable Mediator. */ private boolean isFlowContinuable; /** * Is this component is a Splitting Mediator (Clone or Iterate). */ private boolean isFlowSplittingMediator; /** * Is this component is a Aggregate Mediator. */ private boolean isFlowAggregateMediator; /** * Name of the component. */ private String componentName; /** * Statistic tracing id for the message flow. */ private String messageFlowId; /** * Payload before mediation by the component. */ private String beforePayload; /** * Payload after mediation by the component. */ private String afterPayload; /** * Unique Id of the reporting component. */ private String componentId; /** * HashCode of the reporting component. */ private Integer hashCode; /** * Children List for the component. */ private List<Integer> children = new LinkedList<>(); /** * Synapse Message context properties for the component. */ private Map<String, Object> contextPropertyMap; /** * Transport properties for the component. */ private Map<String, Object> transportPropertyMap; /** * Component type of the component. */ private ComponentType componentType; /** * Reference to immediate parent of a node */ private int immediateParent; /** * Flag indicates whether tracing enabled for the component */ private boolean isTracingEnabled; public StatisticsLog(StatisticDataUnit statisticDataUnit) { this.parentIndex = statisticDataUnit.getParentIndex(); this.currentIndex = statisticDataUnit.getCurrentIndex(); this.startTime = statisticDataUnit.getTime(); this.isFlowContinuable = statisticDataUnit.isFlowContinuableMediator(); this.isFlowSplittingMediator = statisticDataUnit.isFlowSplittingMediator(); this.isFlowAggregateMediator = statisticDataUnit.isFlowAggregateMediator(); this.componentName = statisticDataUnit.getComponentName(); this.messageFlowId = statisticDataUnit.getStatisticId(); this.beforePayload = statisticDataUnit.getPayload(); this.contextPropertyMap = statisticDataUnit.getContextPropertyMap(); this.transportPropertyMap = statisticDataUnit.getTransportPropertyMap(); this.componentType = statisticDataUnit.getComponentType(); this.hashCode = statisticDataUnit.getHashCode(); if (statisticDataUnit.getComponentId() == null) { this.componentId = StatisticsConstants.HASH_CODE_NULL_COMPONENT; } else { this.componentId = statisticDataUnit.getComponentId(); } this.isTracingEnabled = statisticDataUnit.isTracingEnabled(); } public StatisticsLog(ComponentType componentType, String componentName, int parentIndex) { this.componentType = componentType; this.componentName = componentName; this.parentIndex = parentIndex; } public void decrementParentLevel() { this.parentIndex--; } public void decrementChildren() { if (children.size() > 0) { for (Integer child : children) { child -= 1; } } } public String getComponentTypeToString() { switch (componentType) { case PROXYSERVICE: return StatisticsConstants.FLOW_STATISTICS_PROXYSERVICE; case ENDPOINT: return StatisticsConstants.FLOW_STATISTICS_ENDPOINT; case INBOUNDENDPOINT: return StatisticsConstants.FLOW_STATISTICS_INBOUNDENDPOINT; case SEQUENCE: return StatisticsConstants.FLOW_STATISTICS_SEQUENCE; case MEDIATOR: return StatisticsConstants.FLOW_STATISTICS_MEDIATOR; case API: return StatisticsConstants.FLOW_STATISTICS_API; case RESOURCE: return StatisticsConstants.FLOW_STATISTICS_RESOURCE; default: return StatisticsConstants.FLOW_STATISTICS_ANY; } } public void setEndTime(long endTime) { this.endTime = endTime; } public int getParentIndex() { return parentIndex; } public ComponentType getComponentType() { return componentType; } public long getStartTime() { return startTime; } public String getComponentName() { return componentName; } public long getEndTime() { return endTime; } public int getNoOfFaults() { return noOfFaults; } public void incrementNoOfFaults() { this.noOfFaults += 1; } public void setChildren(Integer childrenIndex) { this.children.add(childrenIndex); } public List<Integer> getChildren() { return children; } public String getMessageFlowId() { return messageFlowId; } public void setMessageFlowId(String messageFlowId) { this.messageFlowId = messageFlowId; } public String getBeforePayload() { return beforePayload; } public void setBeforePayload(String beforePayload) { this.beforePayload = beforePayload; } public Map<String, Object> getContextPropertyMap() { return contextPropertyMap; } public void setAfterPayload(String afterPayload) { this.afterPayload = afterPayload; } public String getAfterPayload() { return afterPayload; } public boolean isOpenLog() { return numberOpenTimes > 0; } public void incrementOpenTimes() { this.numberOpenTimes++; } public void decrementOpenTimes() { this.numberOpenTimes--; } public void setParentIndex(int parentIndex) { this.parentIndex = parentIndex; } public int getCurrentIndex() { return currentIndex; } public Map<String, Object> getTransportPropertyMap() { return transportPropertyMap; } public void setChildren(List<Integer> children) { this.children = children; } public boolean isFlowContinuable() { return isFlowContinuable; } public boolean isFlowSplittingMediator() { return isFlowSplittingMediator; } public boolean isFlowAggregateMediator() { return isFlowAggregateMediator; } public int getImmediateParent() { return immediateParent; } public void setImmediateParent(int immediateParent) { this.immediateParent = immediateParent; } public String getComponentId() { return componentId; } public Integer getHashCode() { return hashCode; } public void setHashCode(Integer hashCode) { this.hashCode = hashCode; } public boolean isTracingEnabled() { return isTracingEnabled; } public void setTracingEnabled(boolean tracingEnabled) { isTracingEnabled = tracingEnabled; } public void setComponentId(String componentId) { this.componentId = componentId; } public void setComponentName(String componentName) { this.componentName = componentName; } public void setStartTime(long startTime) { this.startTime = startTime; } public void setComponentType(ComponentType componentType) { this.componentType = componentType; } }