From bdcee6f0a360c315ce4f2b8b5a14b8cd82be6bcd Mon Sep 17 00:00:00 2001 From: Guangrong Fu Date: Mon, 9 Oct 2017 16:07:15 +0800 Subject: [PATCH 01/16] Change the Dependency Version Change the oparent version to 0.1.1 Change the version of the module to 1.0.0 Change-Id: I5d602616bfebde1a558858c5fef6056c91498c13 Issue-ID: HOLMES-52 Signed-off-by: Guangrong Fu --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 378568d..54a3636 100644 --- a/pom.xml +++ b/pom.xml @@ -13,14 +13,14 @@ org.onap.oparent oparent - 1.0.0-SNAPSHOT + 0.1.1 org.onap.holmes.common holmes-common-parent pom - 1.0.0-SNAPSHOT + 1.0.0 holmes-common holmes-actions -- 2.16.6 From bfb24b1cc32e287b019fbcef89ac403a660354bb Mon Sep 17 00:00:00 2001 From: Shiwei Tian Date: Mon, 9 Oct 2017 16:30:27 +0800 Subject: [PATCH 02/16] modify control loop name Issue-ID: HOLMES-67 Change-Id: I3911ff57abbe87089dc3d7a2a0e1d4f14ad26cb4 Signed-off-by: Shiwei Tian --- .../org/onap/holmes/common/dcae/entity/Rule.java | 1 + .../common/dcae/utils/DcaeConfigurationParser.java | 8 +++++-- .../org/onap/holmes/common/dmaap/DmaapService.java | 27 ++++++++-------------- .../dcae/utils/DcaeConfigurationParserTest.java | 1 - .../onap/holmes/common/dmaap/DmaapServiceTest.java | 4 ++-- holmes-actions/src/test/resources/dcae.config.json | 2 +- 6 files changed, 19 insertions(+), 24 deletions(-) diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/dcae/entity/Rule.java b/holmes-actions/src/main/java/org/onap/holmes/common/dcae/entity/Rule.java index 207f224..0d76b9f 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/dcae/entity/Rule.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/dcae/entity/Rule.java @@ -25,6 +25,7 @@ import lombok.Setter; @AllArgsConstructor public class Rule { private String name; + private String loopControlName; private String contents; private int enabled = 1; } diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/dcae/utils/DcaeConfigurationParser.java b/holmes-actions/src/main/java/org/onap/holmes/common/dcae/utils/DcaeConfigurationParser.java index e4899d3..9284dd8 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/dcae/utils/DcaeConfigurationParser.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/dcae/utils/DcaeConfigurationParser.java @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.onap.holmes.common.dcae.utils; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.Map.Entry; import java.util.Set; @@ -30,6 +30,8 @@ import org.onap.holmes.common.exception.CorrelationException; public class DcaeConfigurationParser { + private static final String RULE_CONTENT_SPLIT = "\\$\\$\\$"; + private static final List OBJECT_ATTRS = Arrays .asList(new String[]{"streams_subscribes", "streams_publishes", "services_calls", "services_provides"}); @@ -102,7 +104,9 @@ public class DcaeConfigurationParser { Set> entries = jsonObject.entrySet(); for (Entry entry : entries) { if (entry.getKey().startsWith("holmes.default.rule")) { - ret.addDefaultRule(new Rule(entry.getKey(), (String) entry.getValue(), 1)); + String value = (String) entry.getValue(); + String[] contents = value.split(RULE_CONTENT_SPLIT); + ret.addDefaultRule(new Rule(entry.getKey(), contents[0], contents[1], 1)); } } } 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 2b03a8a..05b3583 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,8 +18,8 @@ package org.onap.holmes.common.dmaap; import com.fasterxml.jackson.core.JsonProcessingException; import java.util.List; import java.util.Optional; +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; @@ -36,11 +36,14 @@ 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 static ConcurrentHashMap loopControlNames = new ConcurrentHashMap<>(); + public void publishPolicyMsg(PolicyMsg policyMsg) { try { publisher.publish(policyMsg); @@ -52,9 +55,9 @@ public class DmaapService { } } - public PolicyMsg getPolicyMsg(VesAlarm vesAlarm) { + public PolicyMsg getPolicyMsg(VesAlarm vesAlarm, String packgeName) { return Optional.ofNullable(getVmEntity(vesAlarm.getSourceId(), vesAlarm.getSourceName())) - .map(vmEntity -> getEnrichedPolicyMsg(vmEntity, vesAlarm)) + .map(vmEntity -> getEnrichedPolicyMsg(vmEntity, vesAlarm, packgeName)) .orElse(getDefaultPolicyMsg(vesAlarm.getSourceName())); } @@ -94,28 +97,16 @@ public class DmaapService { return vmEntity; } - private PolicyMsg getEnrichedPolicyMsg(VmEntity vmEntity, VesAlarm vesAlarm) { + private PolicyMsg getEnrichedPolicyMsg(VmEntity vmEntity, VesAlarm vesAlarm, String packageName) { 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); - if (vesAlarm.getAlarmIsCleared() == 1) { + if (vesAlarm.getAlarmIsCleared() == POLICY_MESSAGE_ABATED) { policyMsg.setClosedLoopEventStatus(EVENT_STATUS.ABATED); } else { 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.setClosedLoopControlName(loopControlNames.get(packageName)); policyMsg.getAai().put("vserver.in-maint", String.valueOf(vmEntity.getInMaint())); policyMsg.getAai().put("vserver.is-closed-loop-disabled", String.valueOf(vmEntity.getClosedLoopDisable())); diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/dcae/utils/DcaeConfigurationParserTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/dcae/utils/DcaeConfigurationParserTest.java index e20ed5e..827220c 100644 --- a/holmes-actions/src/test/java/org/onap/holmes/common/dcae/utils/DcaeConfigurationParserTest.java +++ b/holmes-actions/src/test/java/org/onap/holmes/common/dcae/utils/DcaeConfigurationParserTest.java @@ -52,7 +52,6 @@ public class DcaeConfigurationParserTest { br.lines().forEach(line -> { sb.append(line); }); - try { br.close(); } catch (IOException e) { diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java index 7198ec8..72a0bc8 100644 --- a/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java +++ b/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java @@ -207,10 +207,10 @@ public class DmaapServiceTest { PowerMock.replayAll(); PolicyMsg actual = Whitebox - .invokeMethod(dmaapService, "getEnrichedPolicyMsg", vmEntity, vesAlarm); + .invokeMethod(dmaapService, "getEnrichedPolicyMsg", vmEntity, vesAlarm, "loopName"); PowerMock.verifyAll(); - assertThat(actual.getPolicyName(), equalTo("vLoadBalancer")); + assertThat(actual.getClosedLoopControlName(), equalTo(null)); assertThat(actual.getAai().get("vserver.prov-status"), equalTo("prov")); assertThat(actual.getAai().get("vserver.vserver-name2") == null, equalTo(true)); assertThat(actual.getAai().get("generic-vnf.service-instance-id"), equalTo("")); diff --git a/holmes-actions/src/test/resources/dcae.config.json b/holmes-actions/src/test/resources/dcae.config.json index 6fe72e8..f5aa3ae 100644 --- a/holmes-actions/src/test/resources/dcae.config.json +++ b/holmes-actions/src/test/resources/dcae.config.json @@ -1,5 +1,5 @@ { - "holmes.default.rule.volte.scenario1": "package dcae.ves.test\nimport org.onap.some.related.packages;\nrule\"SameVNF_Relation_Rule\"\nsalience 120\nno-loop true\nwhen\n$root : VesAlarm(\n$sourceId: sourceId, sourceId != null && !sourceId.equals(\"\"),\nspecificProblem in ( \"LSS_cpiPCSCFFailReg(121297)\", \"LSS_cpiSIPRetransmitInvite(120267)\" ),\n$eventId: eventId)\n$child : VesAlarm( eventId != $eventId,\nCorrelationUtil.getInstance().isTopologicallyRelated(sourceId, $sourceId),\nspecificProblem in (\"LSS_externalLinkDown(4271)\",\"LSS_failedAttachReqsRateExceeded(4272)\"),\nthis after [-60s, 60s] $root)\nthen\nDmaapService.publishResult(...);\nend", + "holmes.default.rule.volte.scenario1": "loopname$$$package dcae.ves.test\nimport org.onap.some.related.packages;\nrule\"SameVNF_Relation_Rule\"\nsalience 120\nno-loop true\nwhen\n$root : VesAlarm(\n$sourceId: sourceId, sourceId != null && !sourceId.equals(\"\"),\nspecificProblem in ( \"LSS_cpiPCSCFFailReg(121297)\", \"LSS_cpiSIPRetransmitInvite(120267)\" ),\n$eventId: eventId)\n$child : VesAlarm( eventId != $eventId,\nCorrelationUtil.getInstance().isTopologicallyRelated(sourceId, $sourceId),\nspecificProblem in (\"LSS_externalLinkDown(4271)\",\"LSS_failedAttachReqsRateExceeded(4272)\"),\nthis after [-60s, 60s] $root)\nthen\nDmaapService.publishResult(...);\nend", "collector.schema.file": "./etc/CommonEventFormat_27.2.json", "collector.service.port": 8080, "collector.dmaap.streamid": "fault=sec_fault,roadm-sec-to-hp|syslog=sec_syslog|heartbeat=sec_heartbeat|measurementsForVfScaling=sec_measurement|mobileFlow=sec_mobileflow|other=sec_other|stateChange=sec_statechange|thresholdCrossingAlert=sec_thresholdCrossingAlert", -- 2.16.6 From 9356202306e1eb327e92de7a5fcdc3ad1d0a7182 Mon Sep 17 00:00:00 2001 From: Guangrong Fu Date: Mon, 9 Oct 2017 19:31:00 +0800 Subject: [PATCH 03/16] Change the Version of the Parent POM Change-Id: If5a77c1c3c61863066b7d99d9024db8c5d930701 Issue-ID: HOLMES-52 Signed-off-by: Guangrong Fu --- holmes-actions/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/holmes-actions/pom.xml b/holmes-actions/pom.xml index a44a27f..5395b3c 100644 --- a/holmes-actions/pom.xml +++ b/holmes-actions/pom.xml @@ -12,7 +12,7 @@ org.onap.holmes.common holmes-common-parent - 1.0.0-SNAPSHOT + 1.0.0 holmes-common-service -- 2.16.6 From 7b42bb15c5ed414fd465af8c836ae63abb8b21c0 Mon Sep 17 00:00:00 2001 From: Guangrong Fu Date: Tue, 10 Oct 2017 09:13:02 +0800 Subject: [PATCH 04/16] Change the Version Back to Snapshot Change-Id: I225a67318fbfd20dd7a2505bf4788c324a9761b1 Issue-ID: HOLMES-52 Signed-off-by: Guangrong Fu --- holmes-actions/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/holmes-actions/pom.xml b/holmes-actions/pom.xml index 5395b3c..a44a27f 100644 --- a/holmes-actions/pom.xml +++ b/holmes-actions/pom.xml @@ -12,7 +12,7 @@ org.onap.holmes.common holmes-common-parent - 1.0.0 + 1.0.0-SNAPSHOT holmes-common-service diff --git a/pom.xml b/pom.xml index 54a3636..9406d9c 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ holmes-common-parent pom - 1.0.0 + 1.0.0-SNAPSHOT holmes-common holmes-actions -- 2.16.6 From 105437a89bd5bcfcaf40dac25e2c087aafb0996b Mon Sep 17 00:00:00 2001 From: Shiwei Tian Date: Fri, 13 Oct 2017 14:11:57 +0800 Subject: [PATCH 05/16] modify not publish messages to DMaaP Issue-ID: HOLMES-71 Change-Id: I96097090b5d2ba2ab611ccb326e4670eba39cea7 Signed-off-by: Shiwei Tian --- .../java/org/onap/holmes/common/aai/AaiQuery.java | 1 - .../holmes/common/dcae/DcaeConfigurationQuery.java | 45 ++++++++++++++++++++++ .../common/dcae/DcaeConfigurationsCache.java | 35 +++++++++++++++++ .../common/dcae/entity/DcaeConfigurations.java | 1 - .../org/onap/holmes/common/dmaap/DmaapService.java | 8 +++- .../org/onap/holmes/common/dmaap/Publisher.java | 8 ++-- .../common/dcae/DcaeConfigurationsCacheTest.java | 42 ++++++++++++++++++++ .../onap/holmes/common/dmaap/DmaapServiceTest.java | 28 +------------- 8 files changed, 134 insertions(+), 34 deletions(-) create mode 100644 holmes-actions/src/main/java/org/onap/holmes/common/dcae/DcaeConfigurationQuery.java create mode 100644 holmes-actions/src/main/java/org/onap/holmes/common/dcae/DcaeConfigurationsCache.java create mode 100644 holmes-actions/src/test/java/org/onap/holmes/common/dcae/DcaeConfigurationsCacheTest.java diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java b/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java index 074c509..fb8a8ca 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java @@ -15,7 +15,6 @@ package org.onap.holmes.common.aai; import java.util.HashMap; import java.util.Map; -import java.util.stream.Stream; import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; import org.jvnet.hk2.annotations.Service; diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/dcae/DcaeConfigurationQuery.java b/holmes-actions/src/main/java/org/onap/holmes/common/dcae/DcaeConfigurationQuery.java new file mode 100644 index 0000000..1576215 --- /dev/null +++ b/holmes-actions/src/main/java/org/onap/holmes/common/dcae/DcaeConfigurationQuery.java @@ -0,0 +1,45 @@ +/* + * Copyright 2017 ZTE Corporation. + * + * Licensed 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.onap.holmes.common.dcae; + +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.WebTarget; +import org.glassfish.jersey.client.ClientConfig; +import org.jvnet.hk2.annotations.Service; +import org.onap.holmes.common.config.MicroServiceConfig; +import org.onap.holmes.common.dcae.entity.DcaeConfigurations; +import org.onap.holmes.common.dcae.utils.DcaeConfigurationParser; +import org.onap.holmes.common.exception.CorrelationException; + +public class DcaeConfigurationQuery { + + public static DcaeConfigurations getDcaeConfigurations(String hostname) + throws CorrelationException { + String serviceAddrInfo = MicroServiceConfig.getServiceAddrInfoFromCBS(hostname); + String response = getDcaeResponse(serviceAddrInfo); + DcaeConfigurations dcaeConfigurations = null; + dcaeConfigurations = DcaeConfigurationParser.parse(response); + return dcaeConfigurations; + } + + private static String getDcaeResponse(String serviceAddrInfo) { + Client client = ClientBuilder.newClient(new ClientConfig()); + WebTarget webTarget = client.target(serviceAddrInfo); + return webTarget.request("application/json").get() + .readEntity(String.class); + } +} diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/dcae/DcaeConfigurationsCache.java b/holmes-actions/src/main/java/org/onap/holmes/common/dcae/DcaeConfigurationsCache.java new file mode 100644 index 0000000..2564e23 --- /dev/null +++ b/holmes-actions/src/main/java/org/onap/holmes/common/dcae/DcaeConfigurationsCache.java @@ -0,0 +1,35 @@ +/* + * Copyright 2017 ZTE Corporation. + * + * Licensed 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.onap.holmes.common.dcae; + +import org.onap.holmes.common.dcae.entity.DcaeConfigurations; +import org.onap.holmes.common.dcae.entity.SecurityInfo; + +public class DcaeConfigurationsCache { + + private static DcaeConfigurations dcaeConfigurations; + + public synchronized static SecurityInfo getPubSecInfo(String key) { + if (dcaeConfigurations != null) { + return dcaeConfigurations.getPubSecInfo(key); + } + return null; + } + + public synchronized static void setDcaeConfigurations(DcaeConfigurations configurations) { + dcaeConfigurations = configurations; + } +} diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/dcae/entity/DcaeConfigurations.java b/holmes-actions/src/main/java/org/onap/holmes/common/dcae/entity/DcaeConfigurations.java index b08261f..f1307c4 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/dcae/entity/DcaeConfigurations.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/dcae/entity/DcaeConfigurations.java @@ -32,7 +32,6 @@ public class DcaeConfigurations extends HashMap{ if (null == rule) { return; } - this.rules.add(rule); } 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 05b3583..64b7dbc 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 @@ -27,6 +27,7 @@ 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; @@ -37,15 +38,18 @@ import org.onap.holmes.common.utils.JacksonUtil; public class DmaapService { public static final int POLICY_MESSAGE_ABATED = 1; + + public static final String PUBLISHER_KEY = "unauthenticated.DCAE_CL_OUTPUT"; + @Inject private AaiQuery aaiQuery; - @Inject - private Publisher publisher; public static ConcurrentHashMap loopControlNames = new ConcurrentHashMap<>(); public void publishPolicyMsg(PolicyMsg policyMsg) { try { + Publisher publisher = new Publisher(); + publisher.setUrl(DcaeConfigurationsCache.getPubSecInfo(PUBLISHER_KEY).getDmaapInfo().getTopicUrl()); publisher.publish(policyMsg); log.info("send policyMsg: " + JacksonUtil.beanToJson(policyMsg)); } catch (CorrelationException e) { diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/Publisher.java b/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/Publisher.java index 035ecaa..285c3d6 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/Publisher.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/Publisher.java @@ -25,6 +25,7 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import lombok.Getter; import lombok.Setter; +import org.apache.http.HttpStatus; import org.glassfish.jersey.client.ClientConfig; import org.jvnet.hk2.annotations.Service; import org.onap.holmes.common.dmaap.entity.PolicyMsg; @@ -47,17 +48,16 @@ public class Publisher { try { content = mapper.writeValueAsString(msg); } catch (JsonProcessingException e) { - throw new CorrelationException("Failed to convert the message object to a json string.", e); + throw new CorrelationException("Failed to convert the message object to a json string.", + e); } - WebTarget webTarget = client.target(url); Response response = webTarget.request(MediaType.APPLICATION_JSON) .post(Entity.entity(content, MediaType.APPLICATION_JSON)); - return checkStatus(response); } private boolean checkStatus(Response response) { - return false; + return (response.getStatus() == HttpStatus.SC_OK) ? true : false; } } diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/dcae/DcaeConfigurationsCacheTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/dcae/DcaeConfigurationsCacheTest.java new file mode 100644 index 0000000..cb071d3 --- /dev/null +++ b/holmes-actions/src/test/java/org/onap/holmes/common/dcae/DcaeConfigurationsCacheTest.java @@ -0,0 +1,42 @@ +/* + * Copyright 2017 ZTE Corporation. + * + * Licensed 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.onap.holmes.common.dcae; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.junit.Assert.*; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.holmes.common.dcae.entity.DcaeConfigurations; +import org.onap.holmes.common.dcae.entity.SecurityInfo; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +@PrepareForTest(DcaeConfigurationsCache.class) +@RunWith(PowerMockRunner.class) +public class DcaeConfigurationsCacheTest { + + @Test + public void testDcaeConfigurationsCache() { + DcaeConfigurations dcaeConfigurations = new DcaeConfigurations(); + SecurityInfo securityInfo = new SecurityInfo(); + securityInfo.setAafUsername("tset11"); + dcaeConfigurations.addPubSecInfo("test", securityInfo); + DcaeConfigurationsCache.setDcaeConfigurations(dcaeConfigurations); + assertThat(DcaeConfigurationsCache.getPubSecInfo("test").getAafUsername(), + equalTo(securityInfo.getAafUsername())); + } +} \ No newline at end of file diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java index 72a0bc8..15b6b80 100644 --- a/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java +++ b/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java @@ -22,6 +22,7 @@ import static org.junit.Assert.assertThat; import java.util.ArrayList; import java.util.List; import org.junit.runner.RunWith; +import org.omg.CORBA.Any; 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; @@ -29,6 +30,7 @@ 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.exception.CorrelationException; +import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.junit.Before; @@ -47,8 +49,6 @@ public class DmaapServiceTest { @Rule public ExpectedException thrown = ExpectedException.none(); - private Publisher publisher; - private AaiQuery aaiQuery; private DmaapService dmaapService; @@ -56,34 +56,10 @@ public class DmaapServiceTest { @Before public void setUp() { dmaapService = new DmaapService(); - publisher = PowerMock.createMock(Publisher.class); - Whitebox.setInternalState(dmaapService, "publisher", publisher); aaiQuery = PowerMock.createMock(AaiQuery.class); Whitebox.setInternalState(dmaapService, "aaiQuery", aaiQuery); } - @Test - public void testDmaapService_publish_ok() throws Exception { - PowerMock.resetAll(); - PolicyMsg policyMsg = new PolicyMsg(); - PowerMock.expectPrivate(publisher, "publish", anyObject(PolicyMsg.class)).andReturn(true) - .anyTimes(); - PowerMock.replayAll(); - Whitebox.invokeMethod(dmaapService, "publishPolicyMsg", policyMsg); - PowerMock.verifyAll(); - } - - @Test - public void testDmaapService_publish_exception() throws Exception { - PowerMock.resetAll(); - final PolicyMsg policyMsg = new PolicyMsg(); - PowerMock.expectPrivate(publisher, "publish", policyMsg) - .andThrow(new CorrelationException("")).anyTimes(); - PowerMock.replayAll(); - Whitebox.invokeMethod(dmaapService, "publishPolicyMsg", policyMsg); - PowerMock.verifyAll(); - } - @Test public void testDmaapService_getDefaultPolicyMsg_ok() throws Exception { PowerMock.resetAll(); -- 2.16.6 From 095ad14dcf2c7e836924e9e4911c5237a94661ce Mon Sep 17 00:00:00 2001 From: Guangrong Fu Date: Sat, 14 Oct 2017 15:21:29 +0800 Subject: [PATCH 06/16] Add Control Loop Related Attrs Change-Id: I5fa8250b5c0893d05d6a6186ff3a05700b8e48da Issue-ID: HOLMES-70 Signed-off-by: Guangrong Fu --- .../java/org/onap/holmes/common/api/entity/CorrelationRule.java | 2 ++ .../java/org/onap/holmes/common/dcae/DcaeConfigurationsCache.java | 8 +++++++- .../src/main/java/org/onap/holmes/common/dmaap/DmaapService.java | 8 ++++---- .../src/main/java/org/onap/holmes/common/utils/HttpsUtils.java | 2 +- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/api/entity/CorrelationRule.java b/holmes-actions/src/main/java/org/onap/holmes/common/api/entity/CorrelationRule.java index c8d61b9..eb9273a 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/api/entity/CorrelationRule.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/api/entity/CorrelationRule.java @@ -54,4 +54,6 @@ public class CorrelationRule { private Date updateTime; @JsonProperty(value = "package") private String packageName; + @JsonProperty(value = "controlloopname") + private String closedControlLoopName; } diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/dcae/DcaeConfigurationsCache.java b/holmes-actions/src/main/java/org/onap/holmes/common/dcae/DcaeConfigurationsCache.java index 2564e23..8646abe 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/dcae/DcaeConfigurationsCache.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/dcae/DcaeConfigurationsCache.java @@ -20,7 +20,7 @@ import org.onap.holmes.common.dcae.entity.SecurityInfo; public class DcaeConfigurationsCache { - private static DcaeConfigurations dcaeConfigurations; + private static DcaeConfigurations dcaeConfigurations = new DcaeConfigurations(); public synchronized static SecurityInfo getPubSecInfo(String key) { if (dcaeConfigurations != null) { @@ -29,6 +29,12 @@ public class DcaeConfigurationsCache { return null; } + public synchronized static void addPubSecInfo(String key, SecurityInfo securityInfo) { + if (dcaeConfigurations != null) { + dcaeConfigurations.addPubSecInfo(key, securityInfo); + } + } + public synchronized static void setDcaeConfigurations(DcaeConfigurations configurations) { dcaeConfigurations = configurations; } 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 64b7dbc..f414341 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 @@ -39,23 +39,23 @@ public class DmaapService { public static final int POLICY_MESSAGE_ABATED = 1; - public static final String PUBLISHER_KEY = "unauthenticated.DCAE_CL_OUTPUT"; - @Inject private AaiQuery aaiQuery; public static ConcurrentHashMap loopControlNames = new ConcurrentHashMap<>(); - public void publishPolicyMsg(PolicyMsg policyMsg) { + public void publishPolicyMsg(PolicyMsg policyMsg, String dmaapConfigKey) { try { Publisher publisher = new Publisher(); - publisher.setUrl(DcaeConfigurationsCache.getPubSecInfo(PUBLISHER_KEY).getDmaapInfo().getTopicUrl()); + 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!"); } } diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/utils/HttpsUtils.java b/holmes-actions/src/main/java/org/onap/holmes/common/utils/HttpsUtils.java index 510491e..091b25c 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/utils/HttpsUtils.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/utils/HttpsUtils.java @@ -74,7 +74,7 @@ public class HttpsUtils { connectionManager = new PoolingHttpClientConnectionManager(registry); connectionManager.setMaxTotal(200); } catch (Exception e) { - log.error("Failed to init ssl builder" + e.getMessage()); + log.error("Failed to initialize the ssl builder: " + e.getMessage()); } } -- 2.16.6 From cea973bd4b6c2e13db5600ac2504b2abab596a21 Mon Sep 17 00:00:00 2001 From: Guangrong Fu Date: Sat, 14 Oct 2017 17:33:02 +0800 Subject: [PATCH 07/16] Extract the Common Tool Change-Id: I010c398172a8a7e75d12326b0c4c7c487c6b9abe Issue-ID: HOLMES-75 Signed-off-by: Guangrong Fu --- .../holmes/common/utils/CorrelationRuleMapper.java | 50 ++++++++++++++++++++ .../common/utils/CorrelationRuleMapperTest.java | 54 ++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 holmes-actions/src/main/java/org/onap/holmes/common/utils/CorrelationRuleMapper.java create mode 100644 holmes-actions/src/test/java/org/onap/holmes/common/utils/CorrelationRuleMapperTest.java diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/utils/CorrelationRuleMapper.java b/holmes-actions/src/main/java/org/onap/holmes/common/utils/CorrelationRuleMapper.java new file mode 100644 index 0000000..aba5060 --- /dev/null +++ b/holmes-actions/src/main/java/org/onap/holmes/common/utils/CorrelationRuleMapper.java @@ -0,0 +1,50 @@ +/* + * Copyright 2017 ZTE Corporation. + * + * Licensed 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.onap.holmes.common.utils; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Properties; +import org.onap.holmes.common.api.entity.CorrelationRule; +import org.skife.jdbi.v2.StatementContext; +import org.skife.jdbi.v2.tweak.ResultSetMapper; + +public class CorrelationRuleMapper implements ResultSetMapper { + + @Override + public CorrelationRule map(int i, ResultSet resultSet, StatementContext statementContext) throws SQLException { + CorrelationRule correlationRule = new CorrelationRule(); + correlationRule.setName(resultSet.getString("name")); + correlationRule.setRid(resultSet.getString("rid")); + correlationRule.setDescription(resultSet.getString("description")); + correlationRule.setEnabled(resultSet.getInt("enable")); + correlationRule.setTemplateID(resultSet.getInt("templateID")); + correlationRule.setEngineID(resultSet.getString("engineID")); + correlationRule.setEngineType(resultSet.getString("engineType")); + correlationRule.setCreator(resultSet.getString("creator")); + correlationRule.setCreateTime(resultSet.getDate("createTime")); + correlationRule.setModifier(resultSet.getString("updator")); + correlationRule.setUpdateTime(resultSet.getDate("updateTime")); + correlationRule.setParams((Properties) resultSet.getObject("params")); + correlationRule.setContent(resultSet.getString("content")); + correlationRule.setVendor(resultSet.getString("vendor")); + correlationRule.setPackageName(resultSet.getString("package")); + correlationRule.setClosedControlLoopName(resultSet.getString("ctrlloop")); + return correlationRule; + } + +} diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/utils/CorrelationRuleMapperTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/utils/CorrelationRuleMapperTest.java new file mode 100644 index 0000000..7f9c246 --- /dev/null +++ b/holmes-actions/src/test/java/org/onap/holmes/common/utils/CorrelationRuleMapperTest.java @@ -0,0 +1,54 @@ +/* + * Copyright 2017 ZTE Corporation. + * + * Licensed 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.onap.holmes.common.utils; + +import static org.easymock.EasyMock.expect; +import static org.junit.Assert.*; + +import java.sql.Date; +import java.sql.ResultSet; +import java.util.Properties; +import org.junit.Test; +import org.powermock.api.easymock.PowerMock; + +public class CorrelationRuleMapperTest { + + @Test + public void map() throws Exception { + CorrelationRuleMapper mapper = new CorrelationRuleMapper(); + ResultSet resultSet = PowerMock.createMock(ResultSet.class); + expect(resultSet.getString("name")).andReturn(""); + expect(resultSet.getString("rid")).andReturn(""); + expect(resultSet.getString("description")).andReturn(""); + expect(resultSet.getInt("enable")).andReturn(0); + expect(resultSet.getInt("templateID")).andReturn(1); + expect(resultSet.getString("engineID")).andReturn(""); + expect(resultSet.getString("engineType")).andReturn(""); + expect(resultSet.getString("creator")).andReturn(""); + expect(resultSet.getDate("createTime")).andReturn(new Date(System.currentTimeMillis())); + expect(resultSet.getString("updator")).andReturn(""); + expect(resultSet.getDate("updateTime")).andReturn(new Date(System.currentTimeMillis())); + expect(resultSet.getObject("params")).andReturn(new Properties()); + expect(resultSet.getString("content")).andReturn(""); + expect(resultSet.getString("vendor")).andReturn(""); + expect(resultSet.getString("package")).andReturn(""); + expect(resultSet.getString("ctrlloop")).andReturn(""); + PowerMock.replay(resultSet); + mapper.map(0, resultSet, null); + PowerMock.verify(resultSet); + } +} \ No newline at end of file -- 2.16.6 From 6c9ff5b3edcb451bb61ff2180e30f79339434d1f Mon Sep 17 00:00:00 2001 From: Shiwei Tian Date: Mon, 16 Oct 2017 10:51:51 +0800 Subject: [PATCH 08/16] modify http request bug Issue-ID: HOLMES-71 Change-Id: I733adbe08e2c237dddb9362c90c368142ec17627 Signed-off-by: Shiwei Tian --- .../java/org/onap/holmes/common/dcae/DcaeConfigurationQuery.java | 7 ++++++- .../src/main/java/org/onap/holmes/common/dmaap/Publisher.java | 9 +++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/dcae/DcaeConfigurationQuery.java b/holmes-actions/src/main/java/org/onap/holmes/common/dcae/DcaeConfigurationQuery.java index 1576215..8dd3690 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/dcae/DcaeConfigurationQuery.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/dcae/DcaeConfigurationQuery.java @@ -30,7 +30,12 @@ public class DcaeConfigurationQuery { public static DcaeConfigurations getDcaeConfigurations(String hostname) throws CorrelationException { String serviceAddrInfo = MicroServiceConfig.getServiceAddrInfoFromCBS(hostname); - String response = getDcaeResponse(serviceAddrInfo); + String response; + try { + response = getDcaeResponse(serviceAddrInfo); + } catch (Exception e) { + throw new CorrelationException("Failed to connect to dcae", e); + } DcaeConfigurations dcaeConfigurations = null; dcaeConfigurations = DcaeConfigurationParser.parse(response); return dcaeConfigurations; diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/Publisher.java b/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/Publisher.java index 285c3d6..0f96181 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/Publisher.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/Publisher.java @@ -52,8 +52,13 @@ public class Publisher { e); } WebTarget webTarget = client.target(url); - Response response = webTarget.request(MediaType.APPLICATION_JSON) - .post(Entity.entity(content, MediaType.APPLICATION_JSON)); + Response response = null; + try { + response = webTarget.request(MediaType.APPLICATION_JSON) + .post(Entity.entity(content, MediaType.APPLICATION_JSON)); + } catch (Exception e) { + throw new CorrelationException("Failed to connect dcae.", e); + } return checkStatus(response); } -- 2.16.6 From 17a3500b535e9dd09a272c7428bdd9c9c945f1bb Mon Sep 17 00:00:00 2001 From: Shiwei Tian Date: Fri, 20 Oct 2017 09:18:11 +0800 Subject: [PATCH 09/16] modify bug Issue-ID: HOLMES-71 Change-Id: Ib54045fcc4505c08b0f3da28aea18a27a510bd4f Signed-off-by: Shiwei Tian --- .../java/org/onap/holmes/common/aai/AaiQuery.java | 6 ++-- .../org/onap/holmes/common/utils/DroolsLog.java | 35 ++++++++++++++++++++++ .../org/onap/holmes/common/aai/AaiQueryTest.java | 2 +- 3 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 holmes-actions/src/main/java/org/onap/holmes/common/utils/DroolsLog.java diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java b/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java index fb8a8ca..40390b8 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java @@ -73,7 +73,7 @@ public class AaiQuery { } private String getResourceLinksResponse(String vserverId, String vserverName) throws CorrelationException { - String url = getBaseUrl(getMsbSuffixAddr(AaiConfig.AAI_VNF_ADDR) + "vserver-id:EQUALS:" + vserverId); + String url = getBaseUrl(getMsbSuffixAddr(AaiConfig.AAI_VM_ADDR) + "vserver-id:EQUALS:" + vserverId); String response = getResponse(url); if ("".equals(response) || "{}".equals(response)) { url = getBaseUrl(AaiConfig.AAI_VM_ADDR + "vserver-name:EQUALS:" + vserverName); @@ -83,7 +83,7 @@ public class AaiQuery { } private String getVnfDataResponse(String vnfId, String vnfName) throws CorrelationException { - String url = getBaseUrl(getMsbSuffixAddr(AaiConfig.AAI_VM_ADDR)+ "vnf-id=" + vnfId); + String url = getBaseUrl(getMsbSuffixAddr(AaiConfig.AAI_VNF_ADDR)+ "vnf-id=" + vnfId); String response = getResponse(url); if ("".equals(response) || "{}".equals(response)) { url = getBaseUrl(AaiConfig.AAI_VNF_ADDR + "vnf-name=" + vnfName); @@ -113,7 +113,7 @@ public class AaiQuery { private String getMsbSuffixAddr(String suffixUrl) { String[] addrSplits = suffixUrl.substring(1).split("/"); String ret = addrSplits[1]; - addrSplits[1] = addrSplits[2]; + addrSplits[1] = addrSplits[0] + "-" + addrSplits[2]; addrSplits[2] = ret; StringBuffer stringBuffer = new StringBuffer(); for (String split : addrSplits) { diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/utils/DroolsLog.java b/holmes-actions/src/main/java/org/onap/holmes/common/utils/DroolsLog.java new file mode 100644 index 0000000..579abf8 --- /dev/null +++ b/holmes-actions/src/main/java/org/onap/holmes/common/utils/DroolsLog.java @@ -0,0 +1,35 @@ +/** + * Copyright 2017 ZTE Corporation. + * + * Licensed 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.onap.holmes.common.utils; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class DroolsLog { + + public static void printError(String msg) { + log.error("Drools Log: " + msg); + } + + public static void printWarn(String msg) { + log.warn("Drools Log: " + msg); + } + + public static void printInfo(String msg) { + log.info("Drools Log: " + msg); + } + + public static void printDebug(String msg) { + log.debug("Drools Log: " + msg); + } +} diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/aai/AaiQueryTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/aai/AaiQueryTest.java index 59f8848..34a6c46 100644 --- a/holmes-actions/src/test/java/org/onap/holmes/common/aai/AaiQueryTest.java +++ b/holmes-actions/src/test/java/org/onap/holmes/common/aai/AaiQueryTest.java @@ -354,7 +354,7 @@ public class AaiQueryTest { public void testAaiQuery_getMsbSuffixAddr_Ok() throws Exception { PowerMock.resetAll(); String url = "/aai/v11/network/generic-vnfs/generic-vnf?"; - String expect = "/aai/network/v11/generic-vnfs/generic-vnf?"; + String expect = "/aai/aai-network/v11/generic-vnfs/generic-vnf?"; aaiQuery = new AaiQuery(); PowerMock.replayAll(); String actual = Whitebox.invokeMethod(aaiQuery, "getMsbSuffixAddr", url); -- 2.16.6 From c3a783d2ed1e9e19525b7a88a0ef29aab419a436 Mon Sep 17 00:00:00 2001 From: Shiwei Tian Date: Fri, 20 Oct 2017 12:31:37 +0800 Subject: [PATCH 10/16] modify bug Issue-ID: HOLMES-71 Change-Id: Ib3a2f5b6614166aabccdbc78566d35d644661ee9 Signed-off-by: Shiwei Tian --- .../org/onap/holmes/common/utils/HttpsUtils.java | 30 ++++++++++++++-------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/utils/HttpsUtils.java b/holmes-actions/src/main/java/org/onap/holmes/common/utils/HttpsUtils.java index 091b25c..72e27db 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/utils/HttpsUtils.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/utils/HttpsUtils.java @@ -18,17 +18,15 @@ import java.io.IOException; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; +import javax.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; import org.apache.http.Consts; -import org.apache.http.HeaderIterator; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.NameValuePair; -import org.apache.http.ParseException; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; @@ -46,16 +44,19 @@ import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.message.BasicNameValuePair; import org.apache.http.ssl.SSLContextBuilder; import org.apache.http.util.EntityUtils; +import org.jvnet.hk2.annotations.Service; import org.onap.holmes.common.exception.CorrelationException; @Slf4j +@Service public class HttpsUtils { private static final String HTTP = "http"; private static final String HTTPS = "https"; private static SSLConnectionSocketFactory sslConnectionSocketFactory = null; private static PoolingHttpClientConnectionManager connectionManager = null; private static SSLContextBuilder sslContextBuilder = null; - static { + + static{ try { sslContextBuilder = new SSLContextBuilder(); sslContextBuilder.loadTrustMaterial(null, new TrustStrategy() { @@ -93,14 +94,25 @@ public class HttpsUtils { public static String get(String url, Map header) throws Exception { HttpResponse httpResponse = null; + CloseableHttpClient httpClient = null; + HttpGet httpGet = null; + String response = ""; try { - CloseableHttpClient httpClient = getHttpClient(); - HttpGet httpGet = getHttpGet(url, header); + httpClient = getHttpClient(); + httpGet = getHttpGet(url, header); httpResponse = getHttpResponse(httpClient, httpGet); + response = getResponseEntity(httpResponse); } catch (Exception e) { throw new CorrelationException("Failed to use get method query data from server"); + } finally { + if (httpGet != null) { + httpGet.releaseConnection(); + } + if (httpResponse != null) { + httpClient.close(); + } } - return getResponseEntity(httpResponse); + return response; } private static HttpPost getHttpPost(String url, Map header, @@ -155,10 +167,6 @@ public class HttpsUtils { httpResponse = httpClient.execute(httpRequest); } catch (Exception e) { throw new CorrelationException("Failed to get data from server"); - } finally { - if (httpClient != null) { - httpClient.close(); - } } return httpResponse; } -- 2.16.6 From ece7abcfdf6d68a8f41732883435822ceb745c11 Mon Sep 17 00:00:00 2001 From: Shiwei Tian Date: Fri, 20 Oct 2017 16:20:05 +0800 Subject: [PATCH 11/16] modify bug Issue-ID: HOLMES-71 Change-Id: I4af999e2061e66f4323b8b7657c4d713e4a4ae00 Signed-off-by: Shiwei Tian --- .../java/org/onap/holmes/common/aai/AaiQuery.java | 2 +- .../onap/holmes/common/aai/config/AaiConfig.java | 2 +- .../org/onap/holmes/common/dmaap/DmaapService.java | 80 +++++++++++++--------- .../holmes/common/aai/config/AaiConfigTest.java | 2 +- .../onap/holmes/common/dmaap/DmaapServiceTest.java | 4 +- 5 files changed, 54 insertions(+), 36 deletions(-) diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java b/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java index 40390b8..df4e4ac 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java @@ -83,7 +83,7 @@ public class AaiQuery { } private String getVnfDataResponse(String vnfId, String vnfName) throws CorrelationException { - String url = getBaseUrl(getMsbSuffixAddr(AaiConfig.AAI_VNF_ADDR)+ "vnf-id=" + vnfId); + String url = getBaseUrl(getMsbSuffixAddr(AaiConfig.AAI_VNF_ADDR)+ "/" + vnfId); String response = getResponse(url); if ("".equals(response) || "{}".equals(response)) { url = getBaseUrl(AaiConfig.AAI_VNF_ADDR + "vnf-name=" + vnfName); diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/aai/config/AaiConfig.java b/holmes-actions/src/main/java/org/onap/holmes/common/aai/config/AaiConfig.java index 1d02c78..d0ddf85 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/aai/config/AaiConfig.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/aai/config/AaiConfig.java @@ -15,7 +15,7 @@ package org.onap.holmes.common.aai.config; public class AaiConfig { - public static final String AAI_VNF_ADDR = "/aai/v11/network/generic-vnfs/generic-vnf?"; + public static final String AAI_VNF_ADDR = "/aai/v11/network/generic-vnfs/generic-vnf"; public static final String AAI_VM_ADDR = "/aai/v11/search/nodes-query?search-node-type=vserver&filter="; 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 f414341..4dfc392 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,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 loopControlNames = new ConcurrentHashMap<>(); + public static ConcurrentHashMap 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; + } } diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/aai/config/AaiConfigTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/aai/config/AaiConfigTest.java index bc91f43..6cbc56e 100644 --- a/holmes-actions/src/test/java/org/onap/holmes/common/aai/config/AaiConfigTest.java +++ b/holmes-actions/src/test/java/org/onap/holmes/common/aai/config/AaiConfigTest.java @@ -24,7 +24,7 @@ public class AaiConfigTest { @Test public void testAaiConfig_get_static_fields() { - String aaiVnfAddr = "/aai/v11/network/generic-vnfs/generic-vnf?"; + String aaiVnfAddr = "/aai/v11/network/generic-vnfs/generic-vnf"; String aaiVmAddr = "/aai/v11/search/nodes-query?search-node-type=vserver&filter="; String xTransactionId = "9999"; String xFromAppId = "jimmy-postman"; diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java index 15b6b80..3f61813 100644 --- a/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java +++ b/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java @@ -21,6 +21,7 @@ import static org.junit.Assert.assertThat; import java.util.ArrayList; import java.util.List; +import org.easymock.EasyMock; import org.junit.runner.RunWith; import org.omg.CORBA.Any; import org.onap.holmes.common.aai.AaiQuery; @@ -177,13 +178,14 @@ public class DmaapServiceTest { VesAlarm vesAlarm = new VesAlarm(); vesAlarm.setEventId("11111"); vesAlarm.setEventName("3333"); + vesAlarm.setSourceId("111"); PowerMock.expectPrivate(dmaapService, "getVnfEntity", anyObject(String.class), anyObject(String.class)).andReturn(null).anyTimes(); PowerMock.replayAll(); PolicyMsg actual = Whitebox - .invokeMethod(dmaapService, "getEnrichedPolicyMsg", vmEntity, vesAlarm, "loopName"); + .invokeMethod(dmaapService, "getEnrichedPolicyMsg", vmEntity, vesAlarm, vesAlarm, "loopName"); PowerMock.verifyAll(); assertThat(actual.getClosedLoopControlName(), equalTo(null)); -- 2.16.6 From 75b8b484b7207c393026ee6509a22b2016a22475 Mon Sep 17 00:00:00 2001 From: Shiwei Tian Date: Mon, 23 Oct 2017 15:34:22 +0800 Subject: [PATCH 12/16] modify bug Issue-ID: HOLMES-71 Change-Id: I1f7828319a571c78ef706220dbc2ae182f4b98ad Signed-off-by: Shiwei Tian --- .../java/org/onap/holmes/common/aai/AaiQuery.java | 16 +++++-- .../org/onap/holmes/common/dmaap/DmaapService.java | 54 +++++++++++++--------- .../onap/holmes/common/dmaap/entity/PolicyMsg.java | 2 +- .../org/onap/holmes/common/aai/AaiQueryTest.java | 35 +++++++------- .../onap/holmes/common/dmaap/DmaapServiceTest.java | 8 ++-- 5 files changed, 67 insertions(+), 48 deletions(-) diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java b/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java index df4e4ac..7cbb6f3 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java @@ -95,13 +95,14 @@ public class AaiQuery { private String getBaseUrl(String suffixUrl) { String url = ""; try { - url = MicroServiceConfig.getMsbServerAddr() + suffixUrl; + String[] msbUrl = MicroServiceConfig.getMsbServerAddr().split(":"); + url = msbUrl[0] + ":" + msbUrl[1] + suffixUrl; } catch (Exception e) { log.info("Failed to get msb address"); } - if (url.equals("")) { + if ("".equals(url)) { try { - url = "https:\\\\" + MicroServiceConfig.getServiceAddrInfoFromCBS("aai_config") + url = "https://" + MicroServiceConfig.getServiceAddrInfoFromCBS("aai_config") + suffixUrl; } catch (Exception e) { log.info("Failed to get aai address"); @@ -112,9 +113,18 @@ public class AaiQuery { private String getMsbSuffixAddr(String suffixUrl) { String[] addrSplits = suffixUrl.substring(1).split("/"); + String[] conv = addrSplits[2].split("-"); + addrSplits[2] = conv[0]; + if (conv.length > 1) { + for(int i = 1; i < conv.length; i++) { + addrSplits[2] = addrSplits[2] + conv[i].substring(0, 1).toUpperCase() + conv[i] + .substring(1); + } + } String ret = addrSplits[1]; addrSplits[1] = addrSplits[0] + "-" + addrSplits[2]; addrSplits[2] = ret; + addrSplits[0] = "api"; StringBuffer stringBuffer = new StringBuffer(); for (String split : addrSplits) { stringBuffer.append("/" + split); 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 4dfc392..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 @@ -24,6 +24,7 @@ import javax.inject.Inject; 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; @@ -71,16 +72,24 @@ public class DmaapService { 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; } @@ -102,15 +111,16 @@ public class DmaapService { alarmUniqueRequestID.put(rootAlarm.getSourceId(), requestID); } policyMsg.setClosedLoopControlName(loopControlNames.get(packageName)); - policyMsg.getAai().put("vserver.in-maint", String.valueOf(vmEntity.getInMaint())); - policyMsg.getAai().put("vserver.is-closed-loop-disabled", + 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()); + 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; } @@ -118,16 +128,16 @@ public class DmaapService { PolicyMsg policyMsg = new PolicyMsg(); policyMsg.setTarget("vserver.vserver-name"); policyMsg.setTargetType("VM"); - policyMsg.getAai().put("vserver.vserver-name", sourceName); + 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); + 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) { diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/entity/PolicyMsg.java b/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/entity/PolicyMsg.java index 0c3078b..4462474 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/entity/PolicyMsg.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/entity/PolicyMsg.java @@ -40,7 +40,7 @@ public class PolicyMsg { @JsonProperty(value = "target_type") private String targetType = "VM"; private String target; - private Map aai = new HashMap<>(); + private Map AAI = new HashMap<>(); public static enum EVENT_STATUS { ONSET, ABATED; diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/aai/AaiQueryTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/aai/AaiQueryTest.java index 34a6c46..7872f2b 100644 --- a/holmes-actions/src/test/java/org/onap/holmes/common/aai/AaiQueryTest.java +++ b/holmes-actions/src/test/java/org/onap/holmes/common/aai/AaiQueryTest.java @@ -93,13 +93,14 @@ public class AaiQueryTest { headers.put("X-FromAppId", AaiConfig.X_FROMAPP_ID); headers.put("Authorization", AaiConfig.getAuthenticationCredentials()); headers.put("Accept", "application/json"); - String url = "host_url"; + String url = "http://10.96.33.33/api/aai-cloudInfrastructure/v11"; when(HttpsUtils.get(url, headers)).thenReturn("{}"); PowerMockito.mockStatic(MicroServiceConfig.class); - when(MicroServiceConfig.getMsbServerAddr()).thenReturn("host_url"); + when(MicroServiceConfig.getMsbServerAddr()).thenReturn("http://10.96.33.33:80"); - PowerMock.expectPrivate(aaiQuery, "getVmResourceLinks", "test1", "test2").andReturn(""); + PowerMock.expectPrivate(aaiQuery, "getVmResourceLinks", "test1", "test2") + .andReturn("/aai/v11/cloud-infrastructure"); PowerMock.replayAll(); VmEntity vmEntity = Whitebox.invokeMethod(aaiQuery, "getAaiVmData", "test1", "test2"); PowerMock.verifyAll(); @@ -125,14 +126,15 @@ public class AaiQueryTest { headers.put("X-FromAppId", AaiConfig.X_FROMAPP_ID); headers.put("Authorization", AaiConfig.getAuthenticationCredentials()); headers.put("Accept", "application/json"); - String url = "host_url"; + String url = "http://10.96.33.33/api/aai-cloudInfrastructure/v11"; when(HttpsUtils.get(url, headers)).thenReturn(""); PowerMockito.mockStatic(MicroServiceConfig.class); - when(MicroServiceConfig.getMsbServerAddr()).thenReturn("host_url"); + when(MicroServiceConfig.getMsbServerAddr()).thenReturn("http://10.96.33.33:80"); - PowerMock.expectPrivate(aaiQuery, "getVmResourceLinks", "test1", "test2").andReturn(""); + PowerMock.expectPrivate(aaiQuery, "getVmResourceLinks", "test1", "test2") + .andReturn("/aai/v11/cloud-infrastructure"); PowerMock.replayAll(); Whitebox.invokeMethod(aaiQuery, "getAaiVmData", "test1", "test2"); @@ -155,14 +157,15 @@ public class AaiQueryTest { headers.put("X-FromAppId", AaiConfig.X_FROMAPP_ID); headers.put("Authorization", AaiConfig.getAuthenticationCredentials()); headers.put("Accept", "application/json"); - String url = "host_url"; + String url = "http://10.96.33.33/api/aai-cloudInfrastructure/v11"; when(HttpsUtils.get(url, headers)).thenThrow(new CorrelationException("")); PowerMockito.mockStatic(MicroServiceConfig.class); - when(MicroServiceConfig.getMsbServerAddr()).thenReturn("host_url"); + when(MicroServiceConfig.getMsbServerAddr()).thenReturn("http://10.96.33.33:80"); - PowerMock.expectPrivate(aaiQuery, "getVmResourceLinks", "test1", "test2").andReturn(""); + PowerMock.expectPrivate(aaiQuery, "getVmResourceLinks", "test1", "test2") + .andReturn("/aai/v11/cloud-infrastructure"); PowerMock.replayAll(); Whitebox.invokeMethod(aaiQuery, "getAaiVmData", "test1", "test2"); PowerMock.verifyAll(); @@ -277,15 +280,11 @@ public class AaiQueryTest { headers.put("Authorization", AaiConfig.getAuthenticationCredentials()); headers.put("Accept", "application/json"); String url = "host_url"; - when(HttpsUtils.get(url, headers)).thenThrow(new CorrelationException("")); - PowerMock.replayAll(); String resource = Whitebox.invokeMethod(aaiQuery, "getResponse", "host_url"); PowerMock.verifyAll(); - assertThat(resource, equalTo("")); - } @Test @@ -308,13 +307,13 @@ public class AaiQueryTest { aaiQuery = new AaiQuery(); PowerMockito.mockStatic(MicroServiceConfig.class); - when(MicroServiceConfig.getMsbServerAddr()).thenReturn("msb"); + when(MicroServiceConfig.getMsbServerAddr()).thenReturn("http://10.96.33.33:80"); when(MicroServiceConfig.getServiceAddrInfoFromCBS("nihao")).thenReturn(""); PowerMock.replayAll(); - String actual = Whitebox.invokeMethod(aaiQuery,"getBaseUrl", "url"); + String actual = Whitebox.invokeMethod(aaiQuery,"getBaseUrl", "/url"); PowerMock.verifyAll(); - assertThat(actual, equalTo("msburl")); + assertThat(actual, equalTo("http://10.96.33.33/url")); } @Test @@ -330,7 +329,7 @@ public class AaiQueryTest { String actual = Whitebox.invokeMethod(aaiQuery,"getBaseUrl", "url"); System.out.println(actual); PowerMock.verifyAll(); - assertThat(actual, equalTo("https:\\\\aaiurl")); + assertThat(actual, equalTo("https://aaiurl")); } @Test @@ -354,7 +353,7 @@ public class AaiQueryTest { public void testAaiQuery_getMsbSuffixAddr_Ok() throws Exception { PowerMock.resetAll(); String url = "/aai/v11/network/generic-vnfs/generic-vnf?"; - String expect = "/aai/aai-network/v11/generic-vnfs/generic-vnf?"; + String expect = "/api/aai-network/v11/generic-vnfs/generic-vnf?"; aaiQuery = new AaiQuery(); PowerMock.replayAll(); String actual = Whitebox.invokeMethod(aaiQuery, "getMsbSuffixAddr", url); diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java index 3f61813..c9f892b 100644 --- a/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java +++ b/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java @@ -72,7 +72,7 @@ public class DmaapServiceTest { assertThat(policyMsg.getTarget(), equalTo("vserver.vserver-name")); assertThat(policyMsg.getTargetType(), equalTo("VM")); - assertThat(policyMsg.getAai().get("vserver.vserver-name"), equalTo("tetss")); + assertThat(policyMsg.getAAI().get("vserver.vserver-name"), equalTo("tetss")); } @Test @@ -189,8 +189,8 @@ public class DmaapServiceTest { PowerMock.verifyAll(); assertThat(actual.getClosedLoopControlName(), equalTo(null)); - assertThat(actual.getAai().get("vserver.prov-status"), equalTo("prov")); - assertThat(actual.getAai().get("vserver.vserver-name2") == null, equalTo(true)); - assertThat(actual.getAai().get("generic-vnf.service-instance-id"), equalTo("")); + assertThat(actual.getAAI().get("vserver.prov-status"), equalTo("prov")); + assertThat(actual.getAAI().get("vserver.vserver-name2") == null, equalTo(true)); + assertThat(actual.getAAI().get("generic-vnf.service-instance-id"), equalTo("")); } } \ No newline at end of file -- 2.16.6 From 80aa5b49e5e3fb696231ce66acf198ff50d74731 Mon Sep 17 00:00:00 2001 From: Shiwei Tian Date: Mon, 23 Oct 2017 16:06:41 +0800 Subject: [PATCH 13/16] modify unique bug Issue-ID: HOLMES-71 Change-Id: I7b19e161f74c6dd97b6aeb93ae0d0247ce02b91e Signed-off-by: Shiwei Tian --- .../org/onap/holmes/common/api/stat/VesAlarm.java | 6 ++- .../org/onap/holmes/common/dmaap/DmaapService.java | 44 +++++++++++----------- .../onap/holmes/common/dmaap/entity/PolicyMsg.java | 5 ++- .../onap/holmes/common/api/stat/VesAlarmTest.java | 9 +++-- .../onap/holmes/common/dmaap/DmaapServiceTest.java | 8 ++-- 5 files changed, 40 insertions(+), 32 deletions(-) diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/api/stat/VesAlarm.java b/holmes-actions/src/main/java/org/onap/holmes/common/api/stat/VesAlarm.java index f43d3bd..ead8464 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/api/stat/VesAlarm.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/api/stat/VesAlarm.java @@ -57,7 +57,7 @@ public class VesAlarm implements Cloneable, Serializable{ @Override public int hashCode() { - return this.version.hashCode(); + return (this.getSourceId() + this.eventName.replace("Cleared", "")).hashCode(); } @Override @@ -65,7 +65,9 @@ public class VesAlarm implements Cloneable, Serializable{ if (object == null || !(object instanceof VesAlarm)) { return false; } - return this.version.equals(((VesAlarm) object).getVersion()); + return this.eventName.replace("Cleared", "") + .equals(((VesAlarm) object).getEventName().replace("Cleared", "")) + && this.getSourceId().equals(((VesAlarm) object).getSourceId()); } @Override 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 3ddf126..fc79539 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 @@ -38,14 +38,12 @@ import org.onap.holmes.common.utils.JacksonUtil; @Slf4j @Service public class DmaapService { - public static final int POLICY_MESSAGE_ABATED = 1; - + public static final String SERVICE_INSTANCE = "service-instance"; + public static final String SERVICE_INSTANCE_ID = "service-instance.service-instance-id"; @Inject private AaiQuery aaiQuery; - public static ConcurrentHashMap loopControlNames = new ConcurrentHashMap<>(); - public static ConcurrentHashMap alarmUniqueRequestID = new ConcurrentHashMap<>(); public void publishPolicyMsg(PolicyMsg policyMsg, String dmaapConfigKey) { @@ -75,7 +73,7 @@ public class DmaapService { List relationshipList = vnfEntity.getRelationshipList().getRelationships(); Relationship relationship = null; for(int i = 0; i < relationshipList.size(); i++) { - if ("service-instance".equals(relationshipList.get(i).getRelatedTo())) { + if (SERVICE_INSTANCE.equals(relationshipList.get(i).getRelatedTo())) { relationship = relationshipList.get(i); break; } @@ -83,7 +81,7 @@ public class DmaapService { if (relationship != null) { List relationshipDataList = relationship.getRelationshipDataList(); for(int i = 0; i < relationshipDataList.size(); i++) { - if ("service-instance.service-instance-id" + if (SERVICE_INSTANCE_ID .equals(relationshipDataList.get(i).getRelationshipKey())) { vserverInstanceId = relationshipDataList.get(i).getRelationshipValue(); break; @@ -97,30 +95,34 @@ public class DmaapService { private PolicyMsg getEnrichedPolicyMsg(VmEntity vmEntity, VesAlarm rootAlarm, VesAlarm childAlarm, String packageName) { PolicyMsg policyMsg = new PolicyMsg(); + String alarmUniqueKey = ""; if (rootAlarm.getAlarmIsCleared() == POLICY_MESSAGE_ABATED) { policyMsg.setClosedLoopEventStatus(EVENT_STATUS.ABATED); + alarmUniqueKey = + rootAlarm.getSourceId() + ":" + rootAlarm.getEventName().replace("Cleared", ""); } else { policyMsg.setClosedLoopEventStatus(EVENT_STATUS.ONSET); enrichVnfInfo(childAlarm, policyMsg); + alarmUniqueKey = rootAlarm.getSourceId() + ":" + rootAlarm.getEventName(); } - if (alarmUniqueRequestID.containsKey(rootAlarm.getSourceId())) { - policyMsg.setRequestID(alarmUniqueRequestID.get(rootAlarm.getSourceId())); + if (alarmUniqueRequestID.containsKey(alarmUniqueKey)) { + policyMsg.setRequestID(alarmUniqueRequestID.get(alarmUniqueKey)); } else { String requestID = UUID.randomUUID().toString(); policyMsg.setRequestID(requestID); - alarmUniqueRequestID.put(rootAlarm.getSourceId(), requestID); + alarmUniqueRequestID.put(alarmUniqueKey, 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", + 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("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; } @@ -128,16 +130,16 @@ public class DmaapService { PolicyMsg policyMsg = new PolicyMsg(); policyMsg.setTarget("vserver.vserver-name"); policyMsg.setTargetType("VM"); - policyMsg.getAAI().put("vserver.vserver-name", sourceName); + 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); + 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) { diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/entity/PolicyMsg.java b/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/entity/PolicyMsg.java index 4462474..37713b4 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/entity/PolicyMsg.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/entity/PolicyMsg.java @@ -36,11 +36,12 @@ public class PolicyMsg { private String policyVersion; private String policyName; private String policyScope; - private String from = "HOLMES"; + private String from = "DCAE"; @JsonProperty(value = "target_type") private String targetType = "VM"; private String target; - private Map AAI = new HashMap<>(); + @JsonProperty(value = "AAI") + private Map aai = new HashMap<>(); public static enum EVENT_STATUS { ONSET, ABATED; diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/api/stat/VesAlarmTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/api/stat/VesAlarmTest.java index c2772e8..f046517 100644 --- a/holmes-actions/src/test/java/org/onap/holmes/common/api/stat/VesAlarmTest.java +++ b/holmes-actions/src/test/java/org/onap/holmes/common/api/stat/VesAlarmTest.java @@ -27,7 +27,8 @@ public class VesAlarmTest { @Test public void hashCodeTest() throws Exception { VesAlarm alarm = new VesAlarm(); - alarm.setVersion(0L); + alarm.setEventName("unique"); + alarm.setSourceId("123"); VesAlarm alarmClone = (VesAlarm)alarm.clone(); assertTrue(alarm.hashCode() == alarmClone.hashCode()); } @@ -35,7 +36,8 @@ public class VesAlarmTest { @Test public void equalsTest() throws Exception { VesAlarm alarm = new VesAlarm(); - alarm.setVersion(0L); + alarm.setEventName("unique"); + alarm.setSourceId("123"); VesAlarm alarmClone = (VesAlarm)alarm.clone(); assertTrue(alarm.equals(alarmClone)); } @@ -44,7 +46,8 @@ public class VesAlarmTest { public void cloneTest() throws Exception { VesAlarm alarm = new VesAlarm(); alarm.setDomain("Test"); - alarm.setVersion(0L); + alarm.setEventName("unique"); + alarm.setSourceId("123"); assertThat(alarm, equalTo(alarm.clone())); } diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java index c9f892b..3f61813 100644 --- a/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java +++ b/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java @@ -72,7 +72,7 @@ public class DmaapServiceTest { assertThat(policyMsg.getTarget(), equalTo("vserver.vserver-name")); assertThat(policyMsg.getTargetType(), equalTo("VM")); - assertThat(policyMsg.getAAI().get("vserver.vserver-name"), equalTo("tetss")); + assertThat(policyMsg.getAai().get("vserver.vserver-name"), equalTo("tetss")); } @Test @@ -189,8 +189,8 @@ public class DmaapServiceTest { PowerMock.verifyAll(); assertThat(actual.getClosedLoopControlName(), equalTo(null)); - assertThat(actual.getAAI().get("vserver.prov-status"), equalTo("prov")); - assertThat(actual.getAAI().get("vserver.vserver-name2") == null, equalTo(true)); - assertThat(actual.getAAI().get("generic-vnf.service-instance-id"), equalTo("")); + assertThat(actual.getAai().get("vserver.prov-status"), equalTo("prov")); + assertThat(actual.getAai().get("vserver.vserver-name2") == null, equalTo(true)); + assertThat(actual.getAai().get("generic-vnf.service-instance-id"), equalTo("")); } } \ No newline at end of file -- 2.16.6 From 3e52d0c33f6a7db4e81ebecc50623cd449c624ba Mon Sep 17 00:00:00 2001 From: Shiwei Tian Date: Thu, 26 Oct 2017 16:24:17 +0800 Subject: [PATCH 14/16] modify vnf enriched Issue-ID: HOLMES-71 Change-Id: I3f451df7e95c1ed9d72e9680f16255bc78c8fa36 Signed-off-by: Shiwei Tian --- .../holmes/common/aai/entity/RelationshipList.java | 41 +++++++ .../org/onap/holmes/common/dmaap/DmaapService.java | 120 +++++++++++---------- .../holmes/common/dmaap/PolicyMassgeConstant.java | 26 +++++ .../onap/holmes/common/dmaap/DmaapServiceTest.java | 3 +- 4 files changed, 133 insertions(+), 57 deletions(-) create mode 100644 holmes-actions/src/main/java/org/onap/holmes/common/dmaap/PolicyMassgeConstant.java diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/aai/entity/RelationshipList.java b/holmes-actions/src/main/java/org/onap/holmes/common/aai/entity/RelationshipList.java index 8711e2c..533760c 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/aai/entity/RelationshipList.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/aai/entity/RelationshipList.java @@ -26,6 +26,19 @@ public class RelationshipList { private List relationships; + public Relationship getRelationship(String relatedTo) { + Relationship relationship = null; + if(null == relationships || relationships.size() == 0) + return relationship; + for(int i = 0; i < relationships.size(); i++) { + if (relatedTo.equals(relationships.get(i).getRelatedTo())) { + relationship = relationships.get(i); + break; + } + } + return relationship; + } + @Setter @Getter public static class Relationship { @@ -33,6 +46,34 @@ public class RelationshipList { private String relatedTo; private List relatedToPropertyList; private List relationshipDataList; + + public String getRelatedToPropertyValue(String key) { + String value = ""; + if (null == relatedToPropertyList || relatedToPropertyList.size() == 0) { + return ""; + } + for(int i = 0; i < relatedToPropertyList.size(); i++) { + if (key.equals(relatedToPropertyList.get(i).getPropertyKey())) { + value = relatedToPropertyList.get(i).getPropertyValue(); + break; + } + } + return value; + } + + public String getRelationshipDataValue(String key) { + String value = ""; + if (null == relationshipDataList || relationshipDataList.size() == 0) { + return ""; + } + for(int i = 0; i < relationshipDataList.size(); i++) { + if (key.equals(relationshipDataList.get(i).getRelationshipKey())) { + value = relationshipDataList.get(i).getRelationshipValue(); + break; + } + } + return value; + } } @Setter 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 fc79539..300201f 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 @@ -16,7 +16,6 @@ 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; @@ -25,7 +24,6 @@ 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; @@ -38,9 +36,7 @@ import org.onap.holmes.common.utils.JacksonUtil; @Slf4j @Service public class DmaapService { - public static final int POLICY_MESSAGE_ABATED = 1; - public static final String SERVICE_INSTANCE = "service-instance"; - public static final String SERVICE_INSTANCE_ID = "service-instance.service-instance-id"; + @Inject private AaiQuery aaiQuery; public static ConcurrentHashMap loopControlNames = new ConcurrentHashMap<>(); @@ -49,7 +45,8 @@ public class DmaapService { public void publishPolicyMsg(PolicyMsg policyMsg, String dmaapConfigKey) { try { Publisher publisher = new Publisher(); - publisher.setUrl(DcaeConfigurationsCache.getPubSecInfo(dmaapConfigKey).getDmaapInfo().getTopicUrl()); + publisher.setUrl(DcaeConfigurationsCache.getPubSecInfo(dmaapConfigKey).getDmaapInfo() + .getTopicUrl()); publisher.publish(policyMsg); log.info("send policyMsg: " + JacksonUtil.beanToJson(policyMsg)); } catch (CorrelationException e) { @@ -67,58 +64,25 @@ public class DmaapService { .orElse(getDefaultPolicyMsg(rootAlarm.getSourceName())); } - private String getVserverInstanceId(VnfEntity vnfEntity) { - String vserverInstanceId = ""; - if (vnfEntity != null) { - 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_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(); - String alarmUniqueKey = ""; - if (rootAlarm.getAlarmIsCleared() == POLICY_MESSAGE_ABATED) { - policyMsg.setClosedLoopEventStatus(EVENT_STATUS.ABATED); - alarmUniqueKey = - rootAlarm.getSourceId() + ":" + rootAlarm.getEventName().replace("Cleared", ""); - } else { + policyMsg.setRequestID(getUniqueRequestId(rootAlarm, policyMsg)); + if (rootAlarm.getAlarmIsCleared() == PolicyMassgeConstant.POLICY_MESSAGE_ONSET) { + enrichVnfInfo(vmEntity, childAlarm, policyMsg); policyMsg.setClosedLoopEventStatus(EVENT_STATUS.ONSET); - enrichVnfInfo(childAlarm, policyMsg); - alarmUniqueKey = rootAlarm.getSourceId() + ":" + rootAlarm.getEventName(); - } - if (alarmUniqueRequestID.containsKey(alarmUniqueKey)) { - policyMsg.setRequestID(alarmUniqueRequestID.get(alarmUniqueKey)); + policyMsg.setTarget("vserver.vserver-id"); + 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()); } else { - String requestID = UUID.randomUUID().toString(); - policyMsg.setRequestID(requestID); - alarmUniqueRequestID.put(alarmUniqueKey, requestID); + policyMsg.setClosedLoopAlarmEnd(rootAlarm.getLastEpochMicrosec()); + policyMsg.setClosedLoopEventStatus(EVENT_STATUS.ABATED); } 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.setClosedLoopAlarmStart(rootAlarm.getStartEpochMicrosec()); policyMsg.getAai().put("vserver.vserver-id", vmEntity.getVserverId()); policyMsg.getAai().put("vserver.vserver-name", vmEntity.getVserverName()); policyMsg.getAai().put("vserver.vserver-name2", vmEntity.getVserverName2()); @@ -128,20 +92,64 @@ public class DmaapService { private PolicyMsg getDefaultPolicyMsg(String sourceName) { PolicyMsg policyMsg = new PolicyMsg(); - policyMsg.setTarget("vserver.vserver-name"); + policyMsg.setTarget("vserver.vserver-id"); 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()); + private String getUniqueRequestId(VesAlarm rootAlarm, PolicyMsg policyMsg) { + String alarmUniqueKey = ""; + if (rootAlarm.getAlarmIsCleared() == PolicyMassgeConstant.POLICY_MESSAGE_ABATED) { + alarmUniqueKey = + rootAlarm.getSourceId() + ":" + rootAlarm.getEventName().replace("Cleared", ""); + } else { + alarmUniqueKey = rootAlarm.getSourceId() + ":" + rootAlarm.getEventName(); + } + if (alarmUniqueRequestID.containsKey(alarmUniqueKey)) { + return alarmUniqueRequestID.get(alarmUniqueKey); + } else { + String requestID = UUID.randomUUID().toString(); + alarmUniqueRequestID.put(alarmUniqueKey, requestID); + return requestID; + } + } + + private void enrichVnfInfo(VmEntity vmEntity, VesAlarm childAlarm, PolicyMsg policyMsg) { + String vnfId = ""; + String vnfName = ""; + if (null != childAlarm) { + vnfId = childAlarm.getSourceId(); + vnfName = childAlarm.getSourceName(); + } else { + Relationship relationship = vmEntity.getRelationshipList() + .getRelationship(PolicyMassgeConstant.GENERIC_VNF); + if (null != relationship) { + vnfId = relationship.getRelationshipDataValue(PolicyMassgeConstant.GENERIC_VNF_VNF_ID); + vnfName = relationship.getRelatedToPropertyValue(PolicyMassgeConstant.GENERIC_VNF_VNF_NAME); + } + } + VnfEntity vnfEntity = getVnfEntity(vnfId, vnfName); 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.vnf-id", vnfId); policyMsg.getAai().put("generic-vnf.service-instance-id", vserverInstatnceId); } + + private String getVserverInstanceId(VnfEntity vnfEntity) { + String vserverInstanceId = ""; + if (vnfEntity != null) { + Relationship relationship = vnfEntity.getRelationshipList() + .getRelationship(PolicyMassgeConstant.SERVICE_INSTANCE); + if (relationship == null) { + return vserverInstanceId; + } + vserverInstanceId = relationship + .getRelationshipDataValue(PolicyMassgeConstant.SERVICE_INSTANCE_ID); + } + return vserverInstanceId; + } + private VnfEntity getVnfEntity(String vnfId, String vnfName) { VnfEntity vnfEntity = null; try { diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/PolicyMassgeConstant.java b/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/PolicyMassgeConstant.java new file mode 100644 index 0000000..f67336e --- /dev/null +++ b/holmes-actions/src/main/java/org/onap/holmes/common/dmaap/PolicyMassgeConstant.java @@ -0,0 +1,26 @@ +/* + * Copyright 2017 ZTE Corporation. + * + * Licensed 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.onap.holmes.common.dmaap; + +public class PolicyMassgeConstant { + public static final int POLICY_MESSAGE_ONSET = 0; + public static final int POLICY_MESSAGE_ABATED = 1; + public static final String SERVICE_INSTANCE = "service-instance"; + public static final String SERVICE_INSTANCE_ID = "service-instance.service-instance-id"; + public static final String GENERIC_VNF = "generic-vnf"; + public static final String GENERIC_VNF_VNF_ID = "generic-vnf.vnf-id"; + public static final String GENERIC_VNF_VNF_NAME = "generic-vnf.vnf-name"; +} diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java index 3f61813..5099fba 100644 --- a/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java +++ b/holmes-actions/src/test/java/org/onap/holmes/common/dmaap/DmaapServiceTest.java @@ -70,7 +70,7 @@ public class DmaapServiceTest { .invokeMethod(dmaapService, "getDefaultPolicyMsg", "tetss"); PowerMock.verifyAll(); - assertThat(policyMsg.getTarget(), equalTo("vserver.vserver-name")); + assertThat(policyMsg.getTarget(), equalTo("vserver.vserver-id")); assertThat(policyMsg.getTargetType(), equalTo("VM")); assertThat(policyMsg.getAai().get("vserver.vserver-name"), equalTo("tetss")); } @@ -179,6 +179,7 @@ public class DmaapServiceTest { vesAlarm.setEventId("11111"); vesAlarm.setEventName("3333"); vesAlarm.setSourceId("111"); + vesAlarm.setStartEpochMicrosec(11111L); PowerMock.expectPrivate(dmaapService, "getVnfEntity", anyObject(String.class), anyObject(String.class)).andReturn(null).anyTimes(); -- 2.16.6 From 2e3aee44bf7a25aa665c3e6bd1130209ace50193 Mon Sep 17 00:00:00 2001 From: Guangrong Fu Date: Sun, 29 Oct 2017 11:32:44 +0800 Subject: [PATCH 15/16] Fix the Query URL when Using MSB Change-Id: I60489c9d917573ab47222c0148120c5e4a1cc56e Issue-ID: HOLMES-82 Signed-off-by: Guangrong Fu --- holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java b/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java index 7cbb6f3..cee6236 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/aai/AaiQuery.java @@ -76,7 +76,7 @@ public class AaiQuery { String url = getBaseUrl(getMsbSuffixAddr(AaiConfig.AAI_VM_ADDR) + "vserver-id:EQUALS:" + vserverId); String response = getResponse(url); if ("".equals(response) || "{}".equals(response)) { - url = getBaseUrl(AaiConfig.AAI_VM_ADDR + "vserver-name:EQUALS:" + vserverName); + url = getBaseUrl(getMsbSuffixAddr(AaiConfig.AAI_VM_ADDR) + "vserver-name:EQUALS:" + vserverName); response = getResponse(url); } return response; @@ -86,7 +86,7 @@ public class AaiQuery { String url = getBaseUrl(getMsbSuffixAddr(AaiConfig.AAI_VNF_ADDR)+ "/" + vnfId); String response = getResponse(url); if ("".equals(response) || "{}".equals(response)) { - url = getBaseUrl(AaiConfig.AAI_VNF_ADDR + "vnf-name=" + vnfName); + url = getBaseUrl(getMsbSuffixAddr(AaiConfig.AAI_VNF_ADDR) + "vnf-name=" + vnfName); response = getResponse(url); } return response; -- 2.16.6 From 3dfe506a8ea1bec7096da63541e426958d04a1a0 Mon Sep 17 00:00:00 2001 From: Guangrong Fu Date: Mon, 30 Oct 2017 15:01:53 +0800 Subject: [PATCH 16/16] Update the logic for MSB addr retrieving Change-Id: Id4258d763489f622f68c8152bb89e093993d1982 Issue-ID: HOLMES-81 Signed-off-by: Guangrong Fu --- .../holmes/common/config/MicroServiceConfig.java | 10 ++++++- .../common/config/MicroServiceConfigTest.java | 31 +++++++++++++++------- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/holmes-actions/src/main/java/org/onap/holmes/common/config/MicroServiceConfig.java b/holmes-actions/src/main/java/org/onap/holmes/common/config/MicroServiceConfig.java index 01a5f2e..212bc66 100644 --- a/holmes-actions/src/main/java/org/onap/holmes/common/config/MicroServiceConfig.java +++ b/holmes-actions/src/main/java/org/onap/holmes/common/config/MicroServiceConfig.java @@ -49,6 +49,7 @@ public class MicroServiceConfig { public static String getConfigBindingServiceAddrInfo() { String ret = null; String queryString = getConsulAddrInfo() + CONFIG_BINDING_SERVICE; + log.info("Query the CBS address using the URL: " + queryString); try { JSONObject addrJson = (JSONObject) JSONArray.fromObject(execQuery(queryString)).get(0); if (addrJson.has("ServiceAddress") && addrJson.has("ServicePort")) { @@ -57,6 +58,7 @@ public class MicroServiceConfig { } catch (Exception e) { log.warn(e.getMessage(), e); } + log.info("The CBS address is " + ret); return ret; } @@ -71,6 +73,7 @@ public class MicroServiceConfig { String url = getConfigBindingServiceAddrInfo() + "/service_component/" +serviceName; try { JSONObject jsonObject = JSONObject.fromObject(execQuery(url)); + log.info("The origin configurations (" + url + ") returned by DCAE is: " + jsonObject.toString()); if (jsonObject.has(serviceName)) { ret = (String) jsonObject.getJSONArray(serviceName).get(0); } @@ -92,7 +95,11 @@ public class MicroServiceConfig { public static String[] getMsbAddrInfo() { String[] msbServerInfo = null; - String info = getServiceAddrInfoFromCBS(MSB_ADDR); + //String info = getServiceAddrInfoFromCBS(MSB_ADDR); + String info = getServiceAddrInfoFromCBS(getEnv(HOSTNAME)); + log.info("Got the service information of \"" + getEnv(HOSTNAME) + "\" from CBS. The response is " + info + "."); + JSONObject infoObj = JSONObject.fromObject(info); + info = infoObj.has("msb.hostname") ? infoObj.getString("msb.hostname") : null; if (info != null){ msbServerInfo = split(info); } else { @@ -105,6 +112,7 @@ public class MicroServiceConfig { public static String[] getServiceAddrInfo() { String[] serviceAddrInfo = null; String info = getServiceAddrInfoFromCBS(getEnv(HOSTNAME)); + log.info("Got the service information of \"" + getEnv(HOSTNAME) + "\" from CBS. The response is " + info + "."); if (info != null){ serviceAddrInfo = split(info); } else { diff --git a/holmes-actions/src/test/java/org/onap/holmes/common/config/MicroServiceConfigTest.java b/holmes-actions/src/test/java/org/onap/holmes/common/config/MicroServiceConfigTest.java index 13064c5..23dd075 100644 --- a/holmes-actions/src/test/java/org/onap/holmes/common/config/MicroServiceConfigTest.java +++ b/holmes-actions/src/test/java/org/onap/holmes/common/config/MicroServiceConfigTest.java @@ -41,15 +41,28 @@ public class MicroServiceConfigTest { @Test public void getMsbServerAddrTest() { System.setProperty(MSB_ADDR, "test:80"); + System.setProperty(HOSTNAME, "rule-mgmt"); + PowerMock.mockStaticPartial(MicroServiceConfig.class, "getServiceAddrInfoFromCBS", String.class); + EasyMock.expect(MicroServiceConfig.getServiceAddrInfoFromCBS(System.getProperty(HOSTNAME))) + .andReturn("{\"msb.hostname\": \"test:80\"}"); + PowerMock.replayAll(); assertThat("http://test:80", equalTo(getMsbServerAddr())); + PowerMock.verifyAll(); + System.clearProperty(MicroServiceConfig.HOSTNAME); System.clearProperty(MicroServiceConfig.MSB_ADDR); } @Test public void getMsbServerIpTest() { System.setProperty(MSB_ADDR, "10.54.23.79:80"); + System.setProperty(HOSTNAME, "rule-mgmt"); + PowerMock.mockStaticPartial(MicroServiceConfig.class, "getServiceAddrInfoFromCBS", String.class); + EasyMock.expect(MicroServiceConfig.getServiceAddrInfoFromCBS(System.getProperty(HOSTNAME))) + .andReturn("{\"msb.hostname\": \"10.54.23.79:80\"}").times(2); + PowerMock.replayAll(); assertThat("10.54.23.79", equalTo(getMsbAddrInfo()[0])); assertThat("80", equalTo(getMsbAddrInfo()[1])); + System.clearProperty(MicroServiceConfig.HOSTNAME); System.clearProperty(MSB_ADDR); } @@ -160,11 +173,10 @@ public class MicroServiceConfigTest { @Test public void getMsbAddrInfo_msb_registered() throws Exception { System.setProperty(MSB_ADDR, "10.74.5.8:1545"); - PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class); - PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject()) - .andReturn("[{\"ServiceAddress\": \"127.0.0.2\", \"ServicePort\": \"8080\"}]"); - PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject()) - .andReturn("{\"" + MSB_ADDR + "\": \"[\\\"127.0.0.3:5432\\\"]\"}"); + System.setProperty(HOSTNAME, "rule-mgmt"); + PowerMock.mockStaticPartial(MicroServiceConfig.class, "getServiceAddrInfoFromCBS", String.class); + EasyMock.expect(MicroServiceConfig.getServiceAddrInfoFromCBS(System.getProperty(HOSTNAME))) + .andReturn("{\"msb.hostname\": \"127.0.0.3:5432\"}"); PowerMock.replayAll(); String[] msbInfo = getMsbAddrInfo(); @@ -173,16 +185,16 @@ public class MicroServiceConfigTest { assertThat(msbInfo[0], equalTo("127.0.0.3")); assertThat(msbInfo[1], equalTo("5432")); + System.clearProperty(HOSTNAME); System.clearProperty(MSB_ADDR); } @Test public void getMsbAddrInfo_msb_not_registered() throws Exception { System.setProperty(MSB_ADDR, "10.74.5.8:1545"); - PowerMock.mockStaticPartial(MicroServiceConfig.class, "execQuery", String.class); - PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject()) - .andReturn("[{\"ServiceAddress\": \"127.0.0.2\", \"ServicePort\": \"8080\"}]"); - PowerMock.expectPrivate(MicroServiceConfig.class, "execQuery", EasyMock.anyObject()) + System.setProperty(HOSTNAME, "rule-mgmt"); + PowerMock.mockStaticPartial(MicroServiceConfig.class, "getServiceAddrInfoFromCBS", String.class); + EasyMock.expect(MicroServiceConfig.getServiceAddrInfoFromCBS(System.getProperty(HOSTNAME))) .andReturn("{}"); PowerMock.replayAll(); @@ -192,6 +204,7 @@ public class MicroServiceConfigTest { assertThat(msbInfo[0], equalTo("10.74.5.8")); assertThat(msbInfo[1], equalTo("1545")); + System.clearProperty(HOSTNAME); System.clearProperty(MSB_ADDR); } -- 2.16.6