Search in sources :

Example 1 with AggregatedFlow

use of org.talend.esb.sam.server.persistence.AggregatedFlow in project tesb-rt-se by Talend.

the class SAMRestServiceImpl method aggregateRawData.

public AggregatedFlowCollection aggregateRawData(FlowCollection collection) {
    // Render RAW data
    Map<String, Long> flowLastTimestamp = new HashMap<String, Long>();
    Map<String, String> flowProviderIP = new HashMap<String, String>();
    Map<String, String> flowProviderHost = new HashMap<String, String>();
    Map<String, String> flowConsumerIP = new HashMap<String, String>();
    Map<String, String> flowConsumerHost = new HashMap<String, String>();
    Map<String, Set<String>> flowTypes = new HashMap<String, Set<String>>();
    Map<String, String> flowConsumerPort = new HashMap<String, String>();
    Map<String, String> flowConsumerOperation = new HashMap<String, String>();
    Map<String, String> flowProviderPort = new HashMap<String, String>();
    Map<String, String> flowProviderOperation = new HashMap<String, String>();
    for (Flow obj : collection.getFlows()) {
        if (null == obj.getflowID() || obj.getflowID().isEmpty()) {
            continue;
        }
        String flowID = obj.getflowID();
        flowLastTimestamp.put(flowID, obj.getTimestamp());
        if (!flowTypes.containsKey(flowID)) {
            flowTypes.put(flowID, new HashSet<String>());
        }
        EventTypeEnum typeEnum = obj.getEventType();
        flowTypes.get(flowID).add(typeEnum.toString());
        boolean isConsumer = typeEnum == EventTypeEnum.REQ_OUT || typeEnum == EventTypeEnum.RESP_IN || typeEnum == EventTypeEnum.FAULT_IN;
        boolean isProvider = typeEnum == EventTypeEnum.REQ_IN || typeEnum == EventTypeEnum.RESP_OUT || typeEnum == EventTypeEnum.FAULT_OUT;
        String host = obj.getHost();
        String ip = obj.getIp();
        String port = obj.getPort();
        String operation = obj.getOperation();
        if (isConsumer) {
            flowConsumerIP.put(flowID, ip);
            flowConsumerHost.put(flowID, host);
            flowConsumerPort.put(flowID, port);
            flowConsumerOperation.put(flowID, operation);
        }
        if (isProvider) {
            flowProviderIP.put(flowID, ip);
            flowProviderHost.put(flowID, host);
            flowProviderPort.put(flowID, port);
            flowProviderOperation.put(flowID, operation);
        }
    }
    List<AggregatedFlow> result = new ArrayList<AggregatedFlow>();
    for (Flow obj : collection.getFlows()) {
        String flowID = obj.getflowID();
        if (null == flowID || flowID.isEmpty()) {
            continue;
        }
        Long startTime = flowLastTimestamp.remove(flowID);
        if (null != startTime) {
            AggregatedFlow aggregatedFlow = new AggregatedFlow();
            aggregatedFlow.setFlowID(flowID);
            if (flowProviderPort.containsKey(flowID)) {
                aggregatedFlow.setPort(flowProviderPort.get(flowID));
                aggregatedFlow.setOperation(flowProviderOperation.get(flowID));
            } else {
                aggregatedFlow.setPort(flowConsumerPort.get(flowID));
                aggregatedFlow.setOperation(flowConsumerOperation.get(flowID));
            }
            aggregatedFlow.setTransport(obj.getTransport());
            aggregatedFlow.setTypes(flowTypes.get(flowID));
            long timestamp = obj.getTimestamp();
            aggregatedFlow.setTimestamp(timestamp);
            aggregatedFlow.setElapsed(timestamp - startTime);
            aggregatedFlow.setDetails(uriInfo.getBaseUriBuilder().path("flow").path(flowID).build());
            if (flowConsumerHost.containsKey(flowID)) {
                aggregatedFlow.setConsumerHost(flowConsumerHost.get(flowID));
                aggregatedFlow.setConsumerIP(flowConsumerIP.get(flowID));
            }
            if (flowProviderHost.containsKey(flowID)) {
                aggregatedFlow.setProviderHost(flowProviderHost.get(flowID));
                aggregatedFlow.setProviderIP(flowProviderIP.get(flowID));
            }
            result.add(aggregatedFlow);
        }
    }
    AggregatedFlowCollection fc = new AggregatedFlowCollection();
    fc.setAggregated(result);
    fc.setCount(collection.getCount());
    return fc;
}
Also used : HashSet(java.util.HashSet) Set(java.util.Set) HashMap(java.util.HashMap) AggregatedFlowCollection(org.talend.esb.sam.server.persistence.AggregatedFlowCollection) ArrayList(java.util.ArrayList) AggregatedFlow(org.talend.esb.sam.server.persistence.AggregatedFlow) Flow(org.talend.esb.sam.server.persistence.Flow) AggregatedFlow(org.talend.esb.sam.server.persistence.AggregatedFlow) EventTypeEnum(org.talend.esb.sam.common.event.EventTypeEnum)

Aggregations

ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 Set (java.util.Set)1 EventTypeEnum (org.talend.esb.sam.common.event.EventTypeEnum)1 AggregatedFlow (org.talend.esb.sam.server.persistence.AggregatedFlow)1 AggregatedFlowCollection (org.talend.esb.sam.server.persistence.AggregatedFlowCollection)1 Flow (org.talend.esb.sam.server.persistence.Flow)1