From 530fcc3970550c2ddbe62f51c59b9705cbaa244b Mon Sep 17 00:00:00 2001 From: Guangrong Fu Date: Sat, 14 Oct 2017 16:38:26 +0800 Subject: [PATCH] Add DMaaP Configuration APIs for Testing Change-Id: I4f2d75ba8148f3118a731d0b2d68f13c6b941bb0 Issue-ID: HOLMES-59 Signed-off-by: Guangrong Fu --- .../onap/holmes/engine/db/CorrelationRuleDao.java | 2 +- .../engine/db/mapper/CorrelationRuleMapper.java | 48 ---------- .../engine/dmaappolling/SubscriberAction.java | 8 +- .../holmes/engine/request/DmaapConfigRequest.java | 31 ++++++ .../resources/DmaapConfigurationService.java | 106 +++++++++++++++++++++ .../holmes/engine/resources/EngineResources.java | 4 +- engine-d/src/main/resources/swagger.json | 5 +- .../onap/holmes/engine/EngineDActiveAppTest.java | 6 +- .../db/mapper/CorrelationRuleMapperTest.java | 57 ----------- 9 files changed, 149 insertions(+), 118 deletions(-) delete mode 100644 engine-d/src/main/java/org/onap/holmes/engine/db/mapper/CorrelationRuleMapper.java create mode 100644 engine-d/src/main/java/org/onap/holmes/engine/request/DmaapConfigRequest.java create mode 100644 engine-d/src/main/java/org/onap/holmes/engine/resources/DmaapConfigurationService.java delete mode 100644 engine-d/src/test/java/org/onap/holmes/engine/db/mapper/CorrelationRuleMapperTest.java diff --git a/engine-d/src/main/java/org/onap/holmes/engine/db/CorrelationRuleDao.java b/engine-d/src/main/java/org/onap/holmes/engine/db/CorrelationRuleDao.java index 4e01778..8cd61ef 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/db/CorrelationRuleDao.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/db/CorrelationRuleDao.java @@ -17,8 +17,8 @@ package org.onap.holmes.engine.db; import java.util.List; -import org.onap.holmes.engine.db.mapper.CorrelationRuleMapper; import org.onap.holmes.common.api.entity.CorrelationRule; +import org.onap.holmes.common.utils.CorrelationRuleMapper; import org.skife.jdbi.v2.sqlobject.Bind; import org.skife.jdbi.v2.sqlobject.SqlQuery; import org.skife.jdbi.v2.sqlobject.customizers.RegisterMapper; diff --git a/engine-d/src/main/java/org/onap/holmes/engine/db/mapper/CorrelationRuleMapper.java b/engine-d/src/main/java/org/onap/holmes/engine/db/mapper/CorrelationRuleMapper.java deleted file mode 100644 index a682824..0000000 --- a/engine-d/src/main/java/org/onap/holmes/engine/db/mapper/CorrelationRuleMapper.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * 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.engine.db.mapper; - -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 { - - 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")); - return correlationRule; - } - -} diff --git a/engine-d/src/main/java/org/onap/holmes/engine/dmaappolling/SubscriberAction.java b/engine-d/src/main/java/org/onap/holmes/engine/dmaappolling/SubscriberAction.java index ef585d5..da83683 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/dmaappolling/SubscriberAction.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/dmaappolling/SubscriberAction.java @@ -35,19 +35,19 @@ public class SubscriberAction { private ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); public void addSubscriber(Subscriber subscriber) { - if (!pollingRequests.containsKey(subscriber.getUrl())) { + if (!pollingRequests.containsKey(subscriber.getTopic())) { DMaaPPollingRequest pollingTask = new DMaaPPollingRequest(subscriber, droolsEngine); ScheduledFuture future = service .scheduleAtFixedRate(pollingTask, 0, subscriber.getPeriod(), TimeUnit.MILLISECONDS); - pollingRequests.put(subscriber.getUrl(), future); + pollingRequests.put(subscriber.getTopic(), future); } } public void removeSubscriber(Subscriber subscriber) { - ScheduledFuture future = pollingRequests.get(subscriber.getUrl()); + ScheduledFuture future = pollingRequests.get(subscriber.getTopic()); if (future != null) { future.cancel(true); } - pollingRequests.remove(subscriber.getUrl()); + pollingRequests.remove(subscriber.getTopic()); } } diff --git a/engine-d/src/main/java/org/onap/holmes/engine/request/DmaapConfigRequest.java b/engine-d/src/main/java/org/onap/holmes/engine/request/DmaapConfigRequest.java new file mode 100644 index 0000000..6fa1928 --- /dev/null +++ b/engine-d/src/main/java/org/onap/holmes/engine/request/DmaapConfigRequest.java @@ -0,0 +1,31 @@ +/* + * 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.engine.request; + +import javax.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class DmaapConfigRequest { + @NotNull + private String name; + + @NotNull + private String url; +} diff --git a/engine-d/src/main/java/org/onap/holmes/engine/resources/DmaapConfigurationService.java b/engine-d/src/main/java/org/onap/holmes/engine/resources/DmaapConfigurationService.java new file mode 100644 index 0000000..9fa1874 --- /dev/null +++ b/engine-d/src/main/java/org/onap/holmes/engine/resources/DmaapConfigurationService.java @@ -0,0 +1,106 @@ +/* + * 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.engine.resources; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.DELETE; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import lombok.extern.slf4j.Slf4j; +import org.jvnet.hk2.annotations.Service; +import org.onap.holmes.common.dcae.DcaeConfigurationsCache; +import org.onap.holmes.common.dcae.entity.SecurityInfo; +import org.onap.holmes.common.dropwizard.ioc.utils.ServiceLocatorHolder; +import org.onap.holmes.dsa.dmaappolling.Subscriber; +import org.onap.holmes.engine.dmaappolling.SubscriberAction; +import org.onap.holmes.engine.request.DmaapConfigRequest; + +@Service +@Slf4j +//@Api(tags = {"DMaaP Configurations"}) +@Path("/dmaap") +public class DmaapConfigurationService { + @PUT + @Produces(MediaType.APPLICATION_JSON) + @ApiOperation(value = "Subscribe to a new topic. " + + "If the topic already exists, it is replaced with the new configuration.") + @Path("/sub") + public String addSubInfo( + @ApiParam (value = "A JSON object with the fields named name" + + " and url. Both fields are required.") DmaapConfigRequest config, + @Context HttpServletRequest request){ + String url = config.getUrl(); + if (url.startsWith("http://")) { + Subscriber subscriber = new Subscriber(); + subscriber.setTopic(config.getName()); + subscriber.setUrl(url); + + SubscriberAction subscriberAction = ServiceLocatorHolder.getLocator() + .getService(SubscriberAction.class); + subscriberAction.removeSubscriber(subscriber); + subscriberAction.addSubscriber(subscriber); + + log.info("New configurations applied. Topic Name: " + config.getName() + ", URL: " + url + "."); + + return "{\"message\": \"Succeeded!\", \"topic\": \"" + config.getName() + "\"}"; + } + return "{\"message\": \"Only the HTTP protocol is supported!\"}"; + } + + @DELETE + @Path("/sub/{topic}") + @ApiOperation(value = "Unsubscribe a topic from DMaaP.") + @Produces(MediaType.APPLICATION_JSON) + public String removeSubInfo(@PathParam("topic") String topic){ + Subscriber subscriber = new Subscriber(); + subscriber.setTopic(topic); + + SubscriberAction subscriberAction = ServiceLocatorHolder.getLocator() + .getService(SubscriberAction.class); + subscriberAction.removeSubscriber(subscriber); + + return "{\"message\": \"Topic unsubscribed.\"}"; + } + + @PUT + @Produces(MediaType.APPLICATION_JSON) + @Path("/pub") + @ApiOperation(value = "Add/Update a publishing topic. " + + "If the topic already exists, it is replaced with the new configuration.") + public String updatePubInfo( + @ApiParam (value = "A JSON object with the fields named name" + + " and url. Both fields are required.") DmaapConfigRequest config, + @Context HttpServletRequest request){ + String url = config.getUrl(); + if (url.startsWith("http://")) { + SecurityInfo securityInfo = new SecurityInfo(); + SecurityInfo.DmaapInfo dmaapInfo = new SecurityInfo().new DmaapInfo(); + dmaapInfo.setTopicUrl(config.getUrl()); + securityInfo.setDmaapInfo(dmaapInfo); + DcaeConfigurationsCache.addPubSecInfo(config.getName(), securityInfo); + return "{\"message\": \"Succeeded!\", \"topic\": \"" + config.getName() + "\"}"; + } + return "{\"message\": \"Only the HTTP protocol is supported!\"}"; + } +} diff --git a/engine-d/src/main/java/org/onap/holmes/engine/resources/EngineResources.java b/engine-d/src/main/java/org/onap/holmes/engine/resources/EngineResources.java index 45754e2..9724355 100644 --- a/engine-d/src/main/java/org/onap/holmes/engine/resources/EngineResources.java +++ b/engine-d/src/main/java/org/onap/holmes/engine/resources/EngineResources.java @@ -57,8 +57,8 @@ public class EngineResources { @Produces(MediaType.APPLICATION_JSON) @Timed public CorrelationRuleResponse deployRule( - @ApiParam(value = "The request entity of the HTTP call, which comprises two " - + "fields: \"content\" and \"engineid\". " + @ApiParam(value = "The request entity of the HTTP call, which comprises three " + + "fields: \"content\" , \"loopcontrolname\" and \"engineid\". " + "The \"content\" should be a valid Drools rule string and the \"engineid\" " + "has to be \"engine-d\" in the Amsterdam release.", required = true) DeployRuleRequest deployRuleRequest, @Context HttpServletRequest httpRequest) { diff --git a/engine-d/src/main/resources/swagger.json b/engine-d/src/main/resources/swagger.json index 4dd3f6d..7d227fd 100644 --- a/engine-d/src/main/resources/swagger.json +++ b/engine-d/src/main/resources/swagger.json @@ -63,7 +63,7 @@ "parameters" : [ { "in" : "body", "name" : "body", - "description" : "The request entity of the HTTP call, which comprises two fields: \"content\" and \"engineid\". The \"content\" should be a valid Drools rule string and the \"engineid\" has to be \"engine-d\" in the Amsterdam release.", + "description" : "The request entity of the HTTP call, which comprises three fields: \"content\" , \"loopcontrolname\" and \"engineid\". The \"content\" should be a valid Drools rule string and the \"engineid\" has to be \"engine-d\" in the Amsterdam release.", "required" : true, "schema" : { "$ref" : "#/definitions/DeployRuleRequest" @@ -121,6 +121,9 @@ }, "engineid" : { "type" : "string" + }, + "loopcontrolname" : { + "type" : "string" } } } diff --git a/engine-d/src/test/java/org/onap/holmes/engine/EngineDActiveAppTest.java b/engine-d/src/test/java/org/onap/holmes/engine/EngineDActiveAppTest.java index 362211b..2c6cdb7 100644 --- a/engine-d/src/test/java/org/onap/holmes/engine/EngineDActiveAppTest.java +++ b/engine-d/src/test/java/org/onap/holmes/engine/EngineDActiveAppTest.java @@ -15,13 +15,9 @@ */ package org.onap.holmes.engine; -/** - * Created by Administrator on 2017/2/20. - */ - public class EngineDActiveAppTest { public static void main(String[] args) throws Exception { - String filePath = "C:\\correlation-engine.yml"; + String filePath = "C:\\engine-d.yml"; new EngineDActiveApp().run(new String[]{"server", filePath}); } } diff --git a/engine-d/src/test/java/org/onap/holmes/engine/db/mapper/CorrelationRuleMapperTest.java b/engine-d/src/test/java/org/onap/holmes/engine/db/mapper/CorrelationRuleMapperTest.java deleted file mode 100644 index acf62c6..0000000 --- a/engine-d/src/test/java/org/onap/holmes/engine/db/mapper/CorrelationRuleMapperTest.java +++ /dev/null @@ -1,57 +0,0 @@ -/** - * 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.engine.db.mapper; - -import org.junit.Test; -import org.powermock.api.easymock.PowerMock; - -import java.sql.Date; -import java.sql.ResultSet; -import java.util.Properties; - -import static org.easymock.EasyMock.expect; - -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(0); - 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(""); - - PowerMock.replayAll(); - - mapper.map(0, resultSet, null); - - PowerMock.verify(); - } -} -- 2.16.6