modify bug
[holmes/common.git] / holmes-actions / src / main / java / org / onap / holmes / common / dmaap / DmaapService.java
index f414341..4dfc392 100644 (file)
@@ -18,6 +18,7 @@ package org.onap.holmes.common.dmaap;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import java.util.List;
 import java.util.Optional;
+import java.util.UUID;
 import java.util.concurrent.ConcurrentHashMap;
 import javax.inject.Inject;
 import lombok.extern.slf4j.Slf4j;
@@ -44,6 +45,8 @@ public class DmaapService {
 
     public static ConcurrentHashMap<String, String> loopControlNames = new ConcurrentHashMap<>();
 
+    public static ConcurrentHashMap<String, String> alarmUniqueRequestID = new ConcurrentHashMap<>();
+
     public void publishPolicyMsg(PolicyMsg policyMsg, String dmaapConfigKey) {
         try {
             Publisher publisher = new Publisher();
@@ -59,10 +62,10 @@ public class DmaapService {
         }
     }
 
-    public PolicyMsg getPolicyMsg(VesAlarm vesAlarm, String packgeName) {
-        return Optional.ofNullable(getVmEntity(vesAlarm.getSourceId(), vesAlarm.getSourceName()))
-                .map(vmEntity -> getEnrichedPolicyMsg(vmEntity, vesAlarm, packgeName))
-                .orElse(getDefaultPolicyMsg(vesAlarm.getSourceName()));
+    public PolicyMsg getPolicyMsg(VesAlarm rootAlarm, VesAlarm childAlarm, String packgeName) {
+        return Optional.ofNullable(getVmEntity(rootAlarm.getSourceId(), rootAlarm.getSourceName()))
+                .map(vmEntity -> getEnrichedPolicyMsg(vmEntity, rootAlarm, childAlarm, packgeName))
+                .orElse(getDefaultPolicyMsg(rootAlarm.getSourceName()));
     }
 
     private String getVserverInstanceId(VnfEntity vnfEntity) {
@@ -74,41 +77,29 @@ public class DmaapService {
                     .limit(1).findFirst().get().getRelationshipDataList();
 
             vserverInstanceId = relationshipDataList.stream()
-                    .filter(relationshipData -> relationshipData.getRelationshipKey().equals("service-instance.service-instance-id"))
+                    .filter(relationshipData -> relationshipData.getRelationshipKey()
+                            .equals("service-instance.service-instance-id"))
                     .findFirst()
                     .map(relationshipData -> relationshipData.getRelationshipValue()).get();
         }
         return vserverInstanceId;
     }
 
-    private VnfEntity getVnfEntity(String vnfId, String vnfName) {
-        VnfEntity vnfEntity = null;
-        try {
-            vnfEntity = aaiQuery.getAaiVnfData(vnfId, vnfName);
-        } catch (CorrelationException e) {
-            log.error("Failed to get vnf data", e.getMessage());
-        }
-        return vnfEntity;
-    }
-
-    private VmEntity getVmEntity(String sourceId, String sourceName) {
-        VmEntity vmEntity = null;
-        try {
-            vmEntity = aaiQuery.getAaiVmData(sourceId, sourceName);
-        } catch (CorrelationException e) {
-            log.error("Failed to get vm data", e.getMessage());
-        }
-        return vmEntity;
-    }
-
-    private PolicyMsg getEnrichedPolicyMsg(VmEntity vmEntity, VesAlarm vesAlarm, String packageName) {
-        VnfEntity vnfEntity = getVnfEntity(vesAlarm.getEventId(), vesAlarm.getEventName());
-        String vserverInstatnceId = getVserverInstanceId(vnfEntity);
+    private PolicyMsg getEnrichedPolicyMsg(VmEntity vmEntity, VesAlarm rootAlarm, VesAlarm childAlarm,
+            String packageName) {
         PolicyMsg policyMsg = new PolicyMsg();
-        if (vesAlarm.getAlarmIsCleared() == POLICY_MESSAGE_ABATED) {
+        if (rootAlarm.getAlarmIsCleared() == POLICY_MESSAGE_ABATED) {
             policyMsg.setClosedLoopEventStatus(EVENT_STATUS.ABATED);
         } else {
             policyMsg.setClosedLoopEventStatus(EVENT_STATUS.ONSET);
+            enrichVnfInfo(childAlarm, policyMsg);
+        }
+        if (alarmUniqueRequestID.containsKey(rootAlarm.getSourceId())) {
+            policyMsg.setRequestID(alarmUniqueRequestID.get(rootAlarm.getSourceId()));
+        } else {
+            String requestID = UUID.randomUUID().toString();
+            policyMsg.setRequestID(requestID);
+            alarmUniqueRequestID.put(rootAlarm.getSourceId(), requestID);
         }
         policyMsg.setClosedLoopControlName(loopControlNames.get(packageName));
         policyMsg.getAai().put("vserver.in-maint", String.valueOf(vmEntity.getInMaint()));
@@ -120,9 +111,6 @@ public class DmaapService {
         policyMsg.getAai().put("vserver.vserver-name", vmEntity.getVserverName());
         policyMsg.getAai().put("vserver.vserver-name2", vmEntity.getVserverName2());
         policyMsg.getAai().put("vserver.vserver-selflink", vmEntity.getVserverSelflink());
-        policyMsg.getAai().put("generic-vnf.vnf-id", vesAlarm.getEventId());
-        policyMsg.getAai().put("generic-vnf.vnf-name", vesAlarm.getEventName());
-        policyMsg.getAai().put("generic-vnf.service-instance-id", vserverInstatnceId);
         return policyMsg;
     }
 
@@ -133,4 +121,32 @@ public class DmaapService {
         policyMsg.getAai().put("vserver.vserver-name", sourceName);
         return policyMsg;
     }
+
+    private void enrichVnfInfo(VesAlarm childAlarm, PolicyMsg policyMsg) {
+        VnfEntity vnfEntity = getVnfEntity(childAlarm.getSourceId(), childAlarm.getSourceName());
+        String vserverInstatnceId = getVserverInstanceId(vnfEntity);
+        policyMsg.getAai().put("generic-vnf.vnf-id", childAlarm.getSourceId());
+        policyMsg.getAai().put("generic-vnf.vnf-name", childAlarm.getSourceName());
+        policyMsg.getAai().put("generic-vnf.service-instance-id", vserverInstatnceId);
+    }
+
+    private VnfEntity getVnfEntity(String vnfId, String vnfName) {
+        VnfEntity vnfEntity = null;
+        try {
+            vnfEntity = aaiQuery.getAaiVnfData(vnfId, vnfName);
+        } catch (CorrelationException e) {
+            log.error("Failed to get vnf data", e.getMessage());
+        }
+        return vnfEntity;
+    }
+
+    private VmEntity getVmEntity(String sourceId, String sourceName) {
+        VmEntity vmEntity = null;
+        try {
+            vmEntity = aaiQuery.getAaiVmData(sourceId, sourceName);
+        } catch (CorrelationException e) {
+            log.error("Failed to get vm data", e.getMessage());
+        }
+        return vmEntity;
+    }
 }