X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=holmes-actions%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fholmes%2Fcommon%2Fdmaap%2FDmaapService.java;h=3ddf12614057f67add15224cffa2ae3bf177a6ab;hb=75b8b484b7207c393026ee6509a22b2016a22475;hp=79c861b5fc8e0215e7b3e8fa14560ff1ac29f203;hpb=c9ed775685b01f5622618216748eeac3000285c4;p=holmes%2Fcommon.git diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/DmaapService.java b/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/DmaapService.java index 79c861b..3ddf126 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/DmaapService.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/DmaapService.java @@ -18,15 +18,18 @@ 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.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.jvnet.hk2.annotations.Service; import org.onap.holmes.common.aai.AaiQuery; +import org.onap.holmes.common.aai.entity.RelationshipList.Relationship; import org.onap.holmes.common.aai.entity.RelationshipList.RelationshipData; import org.onap.holmes.common.aai.entity.VmEntity; import org.onap.holmes.common.aai.entity.VnfEntity; import org.onap.holmes.common.api.stat.VesAlarm; +import org.onap.holmes.common.dcae.DcaeConfigurationsCache; import org.onap.holmes.common.dmaap.entity.PolicyMsg; import org.onap.holmes.common.dmaap.entity.PolicyMsg.EVENT_STATUS; import org.onap.holmes.common.exception.CorrelationException; @@ -36,44 +39,107 @@ import org.onap.holmes.common.utils.JacksonUtil; @Service public class DmaapService { + public static final int POLICY_MESSAGE_ABATED = 1; + @Inject private AaiQuery aaiQuery; - @Inject - private Publisher publisher; - public void publishPolicyMsg(PolicyMsg policyMsg) { + public static ConcurrentHashMap loopControlNames = new ConcurrentHashMap<>(); + + public static ConcurrentHashMap alarmUniqueRequestID = new ConcurrentHashMap<>(); + + public void publishPolicyMsg(PolicyMsg policyMsg, String dmaapConfigKey) { try { + Publisher publisher = new Publisher(); + publisher.setUrl(DcaeConfigurationsCache.getPubSecInfo(dmaapConfigKey).getDmaapInfo().getTopicUrl()); publisher.publish(policyMsg); log.info("send policyMsg: " + JacksonUtil.beanToJson(policyMsg)); } catch (CorrelationException e) { log.error("Failed to publish policyMsg to dmaap", e.getMessage()); } catch (JsonProcessingException e) { log.info("Failed to convert policyMsg to json"); + } catch (NullPointerException e) { + log.error("DMaaP configurations does not exist!"); } } - public PolicyMsg getPolicyMsg(VesAlarm vesAlarm) { - return Optional.ofNullable(getVmEntity(vesAlarm.getSourceId(), vesAlarm.getSourceName())) - .map(vmEntity -> getEnrichedPolicyMsg(vmEntity, vesAlarm)) - .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) { String vserverInstanceId = ""; if (vnfEntity != null) { - List relationshipDataList = vnfEntity.getRelationshipList() - .getRelationships().stream() - .filter(relationship -> relationship.getRelatedTo().equals("service-instance")) - .limit(1).findFirst().get().getRelationshipDataList(); - - vserverInstanceId = relationshipDataList.stream() - .filter(relationshipData -> relationshipData.getRelationshipKey().equals("service-instance.service-instance-id")) - .findFirst() - .map(relationshipData -> relationshipData.getRelationshipValue()).get(); + List relationshipList = vnfEntity.getRelationshipList().getRelationships(); + Relationship relationship = null; + for(int i = 0; i < relationshipList.size(); i++) { + if ("service-instance".equals(relationshipList.get(i).getRelatedTo())) { + relationship = relationshipList.get(i); + break; + } + } + if (relationship != null) { + List relationshipDataList = relationship.getRelationshipDataList(); + for(int i = 0; i < relationshipDataList.size(); i++) { + if ("service-instance.service-instance-id" + .equals(relationshipDataList.get(i).getRelationshipKey())) { + vserverInstanceId = relationshipDataList.get(i).getRelationshipValue(); + break; + } + } + } } return vserverInstanceId; } + private PolicyMsg getEnrichedPolicyMsg(VmEntity vmEntity, VesAlarm rootAlarm, VesAlarm childAlarm, + String packageName) { + PolicyMsg policyMsg = new PolicyMsg(); + 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.setTarget(vmEntity.getVserverName()); + policyMsg.getAAI().put("vserver.in-maint", String.valueOf(vmEntity.getInMaint())); + policyMsg.getAAI().put("vserver.is-closed-loop-disabled", + String.valueOf(vmEntity.getClosedLoopDisable())); + policyMsg.getAAI().put("vserver.prov-status", vmEntity.getProvStatus()); + policyMsg.getAAI().put("vserver.resource-version", vmEntity.getResourceVersion()); + policyMsg.getAAI().put("vserver.vserver-id", vmEntity.getVserverId()); + policyMsg.getAAI().put("vserver.vserver-name", vmEntity.getVserverName()); + policyMsg.getAAI().put("vserver.vserver-name2", vmEntity.getVserverName2()); + policyMsg.getAAI().put("vserver.vserver-selflink", vmEntity.getVserverSelflink()); + return policyMsg; + } + + private PolicyMsg getDefaultPolicyMsg(String sourceName) { + PolicyMsg policyMsg = new PolicyMsg(); + policyMsg.setTarget("vserver.vserver-name"); + policyMsg.setTargetType("VM"); + 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 { @@ -93,45 +159,4 @@ public class DmaapService { } return vmEntity; } - - private PolicyMsg getEnrichedPolicyMsg(VmEntity vmEntity, VesAlarm vesAlarm) { - VnfEntity vnfEntity = getVnfEntity(vesAlarm.getEventId(), vesAlarm.getEventName()); - String vserverInstatnceId = getVserverInstanceId(vnfEntity); - PolicyMsg policyMsg = new PolicyMsg(); - policyMsg.setClosedLoopEventClient("DCAE_INSTANCE_ID.dcae-tca"); - policyMsg.setPolicyVersion("1.0.0.5"); - policyMsg.setPolicyName("vLoadBalancer"); - policyMsg.setPolicyScope( - "resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=SampleClosedLoop"); - policyMsg.setTargetType("VM"); - policyMsg.setClosedLoopAlarmStart(1484855); - policyMsg.setClosedLoopEventStatus(EVENT_STATUS.ONSET); - policyMsg.setClosedLoopControlName( - "CL-LB-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8"); - policyMsg.setVersion("1.0.2"); - policyMsg.setTarget("generic-vnf.vnf-id"); - policyMsg.setRequestID("8c1b8bd8-06f7-493f-8ed7-daaa4cc481bc"); - policyMsg.setFrom("DCAE"); - policyMsg.getAai().put("vserver.in-maint", String.valueOf(vmEntity.getInMaint())); - policyMsg.getAai().put("vserver.is-closed-loop-disabled", - String.valueOf(vmEntity.getClosedLoopDisable())); - policyMsg.getAai().put("vserver.prov-status", vmEntity.getProvStatus()); - policyMsg.getAai().put("vserver.resource-version", vmEntity.getResourceVersion()); - policyMsg.getAai().put("vserver.vserver-id", vmEntity.getVserverId()); - 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; - } - - private PolicyMsg getDefaultPolicyMsg(String sourceName) { - PolicyMsg policyMsg = new PolicyMsg(); - policyMsg.setTarget("vserver.vserver-name"); - policyMsg.setTargetType("VM"); - policyMsg.getAai().put("vserver.vserver-name", sourceName); - return policyMsg; - } }