X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=engine-d%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fholmes%2Fengine%2Fresources%2FEngineResources.java;h=4088d72315b55c4c698c1c60702c969b19a06509;hb=d70f48853bf9ab690f3019b1682c422a6854fd8b;hp=3480dbbcbe82b4bd5aaa1dc92359e0e149388f05;hpb=7ab5d3b5150f3941f61f40bc27c94909bcbdfe7d;p=holmes%2Fengine-management.git 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 3480dbb..4088d72 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 @@ -19,7 +19,11 @@ package org.onap.holmes.engine.resources; import com.codahale.metrics.annotation.Timed; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import java.util.Locale; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.DELETE; @@ -32,6 +36,7 @@ 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.dmaap.DmaapService; import org.onap.holmes.common.exception.CorrelationException; import org.onap.holmes.common.utils.ExceptionUtil; import org.onap.holmes.common.utils.LanguageUtil; @@ -42,39 +47,59 @@ import org.onap.holmes.engine.response.CorrelationRuleResponse; @Service @Path("/rule") -@Api(tags = {"Engine Manager"}) +@Api(tags = {"Holmes Engine Management"}) @Produces(MediaType.APPLICATION_JSON) @Slf4j public class EngineResources { - + private Pattern packagePattern = Pattern.compile("package[\\s]+([^;]+)[;\\s]*"); + @Inject DroolsEngine droolsEngine; @PUT - @ApiOperation(value = "Add rule to Engine and Cache", response = CorrelationRuleResponse.class) + @ApiOperation(value = "Deploy a rule into the Drools engine.", response = CorrelationRuleResponse.class) @Produces(MediaType.APPLICATION_JSON) @Timed - public CorrelationRuleResponse deployRule(DeployRuleRequest deployRuleRequest, + public CorrelationRuleResponse deployRule( + @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) { CorrelationRuleResponse crResponse = new CorrelationRuleResponse(); Locale locale = LanguageUtil.getLocale(httpRequest); try { - - String packageName = droolsEngine.deployRule(deployRuleRequest, locale); - log.info("Rule deployed. Package name: " + packageName); - crResponse.setPackageName(packageName); + String packageName = getPackageName(deployRuleRequest.getContent()); + if(packageName == null) { + throw new CorrelationException("Could not find package name in rule: "+deployRuleRequest.getContent()); + } + + DmaapService.loopControlNames + .put(packageName, deployRuleRequest.getLoopControlName()); + String packageNameRet = droolsEngine.deployRule(deployRuleRequest, locale); + if (!packageName.equals(packageNameRet)) { + log.info("The parsed package name is different from that returned by the engine."); + DmaapService.loopControlNames.remove(packageName); + DmaapService.loopControlNames + .put(packageNameRet, deployRuleRequest.getLoopControlName()); + } + log.info("Rule deployed. Package name: " + packageNameRet); + crResponse.setPackageName(packageNameRet); } catch (CorrelationException correlationException) { log.error(correlationException.getMessage(), correlationException); throw ExceptionUtil.buildExceptionResponse(correlationException.getMessage()); + } catch (RuntimeException e) { + log.error(e.getMessage(), e); + throw ExceptionUtil.buildExceptionResponse(e.getMessage()); } return crResponse; } @DELETE - @ApiOperation(value = "delete rule") + @ApiOperation(value = "Undeploy a rule from the Drools engine.") @Produces(MediaType.APPLICATION_JSON) @Timed @Path("/{packageName}") @@ -84,9 +109,8 @@ public class EngineResources { Locale locale = LanguageUtil.getLocale(httpRequest); try { - droolsEngine.undeployRule(packageName, locale); - + DmaapService.loopControlNames.remove(packageName); } catch (CorrelationException correlationException) { log.error(correlationException.getMessage(), correlationException); throw ExceptionUtil.buildExceptionResponse(correlationException.getMessage()); @@ -96,7 +120,7 @@ public class EngineResources { @POST - @ApiOperation(value = "compile rule") + @ApiOperation(value = "Check the validity of a rule.") @Produces(MediaType.APPLICATION_JSON) @Timed public boolean compileRule(CompileRuleRequest compileRuleRequest, @@ -112,4 +136,14 @@ public class EngineResources { } return true; } + + private String getPackageName(String contents){ + Matcher m = packagePattern.matcher(contents); + + if (m.find( )) { + return m.group(1); + }else { + return null; + } + } }