diff options
author | Guangrong Fu <fu.guangrong@zte.com.cn> | 2017-10-14 16:38:26 +0800 |
---|---|---|
committer | Guangrong Fu <fu.guangrong@zte.com.cn> | 2017-10-14 17:38:54 +0800 |
commit | 530fcc3970550c2ddbe62f51c59b9705cbaa244b (patch) | |
tree | ad6b1be923651fb7952b692781ca5a77b116a39a /engine-d | |
parent | e540d3894d2f662a843e5c51535d44b876b9889f (diff) |
Add DMaaP Configuration APIs for Testing
Change-Id: I4f2d75ba8148f3118a731d0b2d68f13c6b941bb0
Issue-ID: HOLMES-59
Signed-off-by: Guangrong Fu <fu.guangrong@zte.com.cn>
Diffstat (limited to 'engine-d')
9 files changed, 149 insertions, 118 deletions
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<CorrelationRule> { - - 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 <b>name</b>" + + " and <b>url</b>. 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 <b>name</b>" + + " and <b>url</b>. 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();
- }
-}
|