use of org.talend.esb.sam.server.persistence.Flow 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;
}
Aggregations