Fix the get loop state logic 21/86521/8
authorxg353y <xg353y@intl.att.com>
Fri, 26 Apr 2019 11:26:25 +0000 (13:26 +0200)
committerxg353y <xg353y@intl.att.com>
Tue, 30 Apr 2019 13:17:51 +0000 (15:17 +0200)
Fix the logic to get the loop state and update the CL deploy/undeploy
flow accordingly

Issue-ID: CLAMP-362
Change-Id: I34f83bd241b1029417453908bf932c0b69f9f5b2
Signed-off-by: xg353y <xg353y@intl.att.com>
src/main/java/org/onap/clamp/clds/model/properties/Holmes.java
src/main/java/org/onap/clamp/loop/LoopOperation.java
src/main/resources/application-noaaf.properties
src/main/resources/application.properties
src/main/resources/clds/camel/rest/clamp-api-v2.xml
src/main/resources/clds/camel/routes/flexible-flow.xml
src/test/resources/application.properties
src/test/resources/http-cache/third_party_proxy.py

index a93b09c..a56c57d 100644 (file)
 package org.onap.clamp.clds.model.properties;
 
 import com.google.gson.JsonObject;
+
 import org.onap.clamp.clds.util.JsonUtils;
 
 /**
- * Parse Holmes bpmn parameters json properties.
- * Example json:
+ * Parse Holmes bpmn parameters json properties. Example json:
  * [{"name":"correlationalLogic","value":"vcwx"},{"name":"configPolicyName","value":"cccc"}]
  */
 public class Holmes extends AbstractModelElement {
@@ -43,14 +43,18 @@ public class Holmes extends AbstractModelElement {
     /**
      * Default constructor for Holmes Element.
      *
-     * @param modelBpmn The model bpmn
-     * @param modelJson The model json
+     * @param modelBpmn
+     *        The model bpmn
+     * @param modelJson
+     *        The model json
      */
     public Holmes(ModelBpmn modelBpmn, JsonObject modelJson) {
         super(TYPE_HOLMES, modelBpmn, modelJson);
 
-        correlationLogic = JsonUtils.getStringValueByName(modelElementJsonNode, "correlationalLogic");
-        configPolicyName = JsonUtils.getStringValueByName(modelElementJsonNode, "configPolicyName");
+        if (modelElementJsonNode != null) {
+            correlationLogic = JsonUtils.getStringValueByName(modelElementJsonNode, "correlationalLogic");
+            configPolicyName = JsonUtils.getStringValueByName(modelElementJsonNode, "configPolicyName");
+        }
     }
 
     public static final String getType() {
index 3f4c529..f38b591 100644 (file)
@@ -31,23 +31,18 @@ import com.google.gson.JsonNull;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonPrimitive;
 
+import java.io.IOException;
 import java.lang.reflect.Array;
 import java.util.Collection;
-import java.util.Date;
 import java.util.Map;
 
-import javax.servlet.http.HttpServletRequest;
-
 import org.apache.camel.Exchange;
-import org.onap.clamp.clds.client.DcaeDispatcherServices;
+import org.apache.camel.Message;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+import org.json.simple.parser.ParseException;
 import org.onap.clamp.clds.config.ClampProperties;
-import org.onap.clamp.clds.util.LoggingUtils;
-import org.onap.clamp.clds.util.ONAPLogConstants;
-import org.onap.clamp.exception.OperationException;
-import org.onap.clamp.util.HttpConnectionManager;
-import org.slf4j.event.Level;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Component;
 import org.yaml.snakeyaml.Yaml;
 
@@ -59,117 +54,179 @@ public class LoopOperation {
 
     protected static final EELFLogger logger = EELFManager.getInstance().getLogger(LoopOperation.class);
     protected static final EELFLogger auditLogger = EELFManager.getInstance().getMetricsLogger();
-    private final DcaeDispatcherServices dcaeDispatcherServices;
+    private static final String DCAE_LINK_FIELD = "links";
+    private static final String DCAE_STATUS_FIELD = "status";
+    private static final String DCAE_DEPLOYMENT_TEMPLATE = "dcae.deployment.template";
+    private static final String DCAE_SERVICETYPE_ID = "serviceTypeId";
+    private static final String DCAE_INPUTS = "inputs";
+    private static final String DCAE_DEPLOYMENT_PREFIX = "closedLoop_";
+    private static final String DCAE_DEPLOYMENT_SUFIX = "_deploymentId";
     private final LoopService loopService;
-    private LoggingUtils util = new LoggingUtils(logger);
+    private final ClampProperties refProp;
 
-    @Autowired
-    private HttpServletRequest request;
+    public enum TempLoopState {
+        NOT_SUBMITTED, SUBMITTED, DEPLOYED, NOT_DEPLOYED, PROCESSING, IN_ERROR;
+    }
 
+    /**
+     * The constructor.
+     * @param loopService The loop service
+     * @param refProp The clamp properties
+     */
     @Autowired
-    public LoopOperation(LoopService loopService, DcaeDispatcherServices dcaeDispatcherServices,
-        ClampProperties refProp, HttpConnectionManager httpConnectionManager) {
+    public LoopOperation(LoopService loopService, ClampProperties refProp) {
         this.loopService = loopService;
-        this.dcaeDispatcherServices = dcaeDispatcherServices;
+        this.refProp = refProp;
     }
-    
+
     /**
-     * Deploy the closed loop.
+     * Get the payload used to send the deploy closed loop request.
      *
-     * @param loopName
-     *        the loop name
-     * @return the updated loop
-     * @throws OperationException
-     *         Exception during the operation
+     * @param loop The loop
+     * @return The payload used to send deploy closed loop request
+     * @throws IOException IOException
      */
-    public Loop deployLoop(Exchange camelExchange, String loopName) throws OperationException {
-        util.entering(request, "CldsService: Deploy model");
-        Date startTime = new Date();
-        Loop loop = loopService.getLoop(loopName);
-
-        if (loop == null) {
-            String msg = "Deploy loop exception: Not able to find closed loop:" + loopName;
-            util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), msg, Level.INFO,
-                ONAPLogConstants.ResponseStatus.ERROR);
-            throw new OperationException(msg);
-        }
+    public String getDeployPayload(Loop loop) throws IOException {
+        Yaml yaml = new Yaml();
+        Map<String, Object> yamlMap = yaml.load(loop.getBlueprint());
+        JsonObject bluePrint = wrapSnakeObject(yamlMap).getAsJsonObject();
+
+        String serviceTypeId = loop.getDcaeBlueprintId();
 
-        // verify the current closed loop state
-        if (loop.getLastComputedState() != LoopState.SUBMITTED) {
-            String msg = "Deploy loop exception: This closed loop is in state:" + loop.getLastComputedState()
-                + ". It could be deployed only when it is in SUBMITTED state.";
-            util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, ONAPLogConstants.ResponseStatus.ERROR);
-            throw new OperationException(msg);
+        JsonObject rootObject = refProp.getJsonTemplate(DCAE_DEPLOYMENT_TEMPLATE).getAsJsonObject();
+        rootObject.addProperty(DCAE_SERVICETYPE_ID, serviceTypeId);
+        if (bluePrint != null) {
+            rootObject.add(DCAE_INPUTS, bluePrint);
         }
+        String apiBodyString = rootObject.toString();
+        logger.info("Dcae api Body String - " + apiBodyString);
 
+        return apiBodyString;
+    }
+
+    /**
+     * Get the deployment id.
+     *
+     * @param loop The loop
+     * @return The deployment id
+     * @throws IOException IOException
+     */
+    public String getDeploymentId(Loop loop) {
         // Set the deploymentId if not present yet
         String deploymentId = "";
         // If model is already deployed then pass same deployment id
         if (loop.getDcaeDeploymentId() != null && !loop.getDcaeDeploymentId().isEmpty()) {
             deploymentId = loop.getDcaeDeploymentId();
         } else {
-            loop.setDcaeDeploymentId(deploymentId = "closedLoop_" + loopName + "_deploymentId");
+            deploymentId = DCAE_DEPLOYMENT_PREFIX + loop.getName() + DCAE_DEPLOYMENT_SUFIX;
         }
+        return deploymentId;
+    }
 
-        Yaml yaml = new Yaml();
-        Map<String, Object> yamlMap = yaml.load(loop.getBlueprint());
-        JsonObject bluePrint = wrapSnakeObject(yamlMap).getAsJsonObject();
+    /**
+     * Update the loop info.
+     *
+     * @param camelExchange The camel exchange
+     * @param loop The loop
+     * @param deploymentId The deployment id
+     * @throws ParseException The parse exception
+     */
+    public void updateLoopInfo(Exchange camelExchange, Loop loop, String deploymentId) throws ParseException {
+        Message in = camelExchange.getIn();
+        String msg = in.getBody(String.class);
 
-        loop.setDcaeDeploymentStatusUrl(
-            dcaeDispatcherServices.createNewDeployment(deploymentId, loop.getDcaeBlueprintId(), bluePrint));
-        loop.setLastComputedState(LoopState.DEPLOYED);
-        // save the updated loop
-        loopService.saveOrUpdateLoop(loop);
+        JSONParser parser = new JSONParser();
+        Object obj0 = parser.parse(msg);
+        JSONObject jsonObj = (JSONObject) obj0;
+
+        JSONObject linksObj = (JSONObject) jsonObj.get(DCAE_LINK_FIELD);
+        String statusUrl = (String) linksObj.get(DCAE_STATUS_FIELD);
+
+        // use http4 instead of http, because camel http4 component is used to do the http call
+        statusUrl.replace("http", "http4");
 
-        // audit log
-        LoggingUtils.setTimeContext(startTime, new Date());
-        auditLogger.info("Deploy model completed");
-        util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED);
-        return loop;
+        loop.setDcaeDeploymentId(deploymentId);
+        loop.setDcaeDeploymentStatusUrl(statusUrl);
+        loopService.saveOrUpdateLoop(loop);
     }
 
     /**
-     * Un deploy closed loop.
+     * Get the Closed Loop status based on the reply from Policy.
      *
-     * @param loopName
-     *        the loop name
-     * @return the updated loop
+     * @param statusCode The status code
+     * @return The state based on policy response
+     * @throws ParseException The parse exception
      */
-    public Loop unDeployLoop(String loopName) throws OperationException {
-        util.entering(request, "LoopOperation: Undeploy the closed loop");
-        Date startTime = new Date();
-        Loop loop = loopService.getLoop(loopName);
-
-        if (loop == null) {
-            String msg = "Undeploy loop exception: Not able to find closed loop:" + loopName;
-            util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), msg, Level.INFO,
-                ONAPLogConstants.ResponseStatus.ERROR);
-            throw new OperationException(msg);
+    public String analysePolicyResponse(int statusCode) throws ParseException {
+        if (statusCode == 200) {
+            return TempLoopState.SUBMITTED.toString();
+        } else if (statusCode == 404) {
+            return TempLoopState.NOT_SUBMITTED.toString();
         }
+        return TempLoopState.IN_ERROR.toString();
+    }
 
-        // verify the current closed loop state
-        if (loop.getLastComputedState() != LoopState.DEPLOYED) {
-            String msg = "Unploy loop exception: This closed loop is in state:" + loop.getLastComputedState()
-                + ". It could be undeployed only when it is in DEPLOYED state.";
-            util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, ONAPLogConstants.ResponseStatus.ERROR);
-            throw new OperationException(msg);
+    /**
+     * Get the Closed Loop status based on the reply from DCAE.
+     *
+     * @param camelExchange The camel exchange
+     * @return The state based on DCAE response
+     * @throws ParseException The parse exception
+     */
+    public String analyseDcaeResponse(Exchange camelExchange, Integer statusCode) throws ParseException {
+        if (statusCode == null) {
+            return TempLoopState.NOT_DEPLOYED.toString();
         }
+        if (statusCode == 200) {
+            Message in = camelExchange.getIn();
+            String msg = in.getBody(String.class);
 
-        loop.setDcaeDeploymentStatusUrl(
-            dcaeDispatcherServices.deleteExistingDeployment(loop.getDcaeDeploymentId(), loop.getDcaeBlueprintId()));
+            JSONParser parser = new JSONParser();
+            Object obj0 = parser.parse(msg);
+            JSONObject jsonObj = (JSONObject) obj0;
 
-        // clean the deployment ID
-        loop.setDcaeDeploymentId(null);
-        loop.setLastComputedState(LoopState.SUBMITTED);
+            String opType = (String) jsonObj.get("operationType");
+            String status = (String) jsonObj.get("status");
 
-        // save the updated loop
-        loopService.saveOrUpdateLoop(loop);
+            // status = processing/successded/failed
+            if (status == "successed") {
+                if (opType == "install") {
+                    return TempLoopState.DEPLOYED.toString();
+                } else if (status == "successed") {
+                    return TempLoopState.NOT_DEPLOYED.toString();
+                }
+            } else if (status == "processing") {
+                return TempLoopState.PROCESSING.toString();
+            }
+        } else if (statusCode == 404) {
+            return TempLoopState.NOT_DEPLOYED.toString();
+        }
+        return TempLoopState.IN_ERROR.toString();
+    }
 
-        // audit log
-        LoggingUtils.setTimeContext(startTime, new Date());
-        auditLogger.info("Undeploy model completed");
-        util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED);
-        return loop;
+    /**
+     * Get the status of the closed loop based on the response from Policy and DCAE.
+     *
+     * @param policyState The state get from Policy
+     * @param dcaeState The state get from DCAE
+     * @throws ParseException The parse exception
+     */
+    public LoopState updateLoopStatus(TempLoopState policyState, TempLoopState dcaeState) {
+        LoopState clState = LoopState.IN_ERROR;
+        if (policyState == TempLoopState.SUBMITTED) {
+            if (dcaeState == TempLoopState.DEPLOYED) {
+                clState = LoopState.DEPLOYED;
+            } else if (dcaeState == TempLoopState.PROCESSING) {
+                clState = LoopState.WAITING;
+            } else if (dcaeState == TempLoopState.NOT_DEPLOYED) {
+                clState = LoopState.SUBMITTED;
+            }
+        } else if (policyState == TempLoopState.NOT_SUBMITTED) {
+            if (dcaeState == TempLoopState.NOT_DEPLOYED) {
+                clState = LoopState.DESIGN;
+            }
+        }
+        return clState;
     }
 
     private JsonElement wrapSnakeObject(Object obj) {
index de3f7c0..52f79be 100644 (file)
@@ -210,6 +210,11 @@ clamp.config.dcae.dispatcher.url=http://dcae.api.simpledemo.onap.org:8188
 clamp.config.dcae.dispatcher.retry.interval=20000
 clamp.config.dcae.dispatcher.retry.limit=30
 
+#DCAE Deployment Url Properties
+clamp.config.dcae.deployment.url=http4://dcae.api.simpledemo.onap.org:8188
+clamp.config.dcae.deployment.userName=test
+clamp.config.dcae.deployment.password=test
+
 #Define user permission related parameters, the permission type can be changed but MUST be redefined in clds-users.properties in that case !
 clamp.config.security.permission.type.cl=org.onap.clamp.clds.cl
 clamp.config.security.permission.type.cl.manage=org.onap.clamp.clds.cl.manage
index f59b8ac..534dc48 100644 (file)
@@ -228,6 +228,11 @@ clamp.config.dcae.dispatcher.url=http://dcae.api.simpledemo.onap.org:8188
 clamp.config.dcae.dispatcher.retry.interval=20000
 clamp.config.dcae.dispatcher.retry.limit=30
 
+#DCAE Deployment Url Properties
+clamp.config.dcae.deployment.url=http4://dcae.api.simpledemo.onap.org:8188
+clamp.config.dcae.deployment.userName=test
+clamp.config.dcae.deployment.password=test
+
 #Define user permission related parameters, the permission type can be changed but MUST be redefined in clds-users.properties in that case !
 clamp.config.security.permission.type.cl=org.onap.clamp.clds.cl
 clamp.config.security.permission.type.cl.manage=org.onap.clamp.clds.cl.manage
index 5c5f122..2640d6b 100644 (file)
                                        <to
                                                uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
                                        <to
-                                               uri="bean:org.onap.clamp.operation.LoopOperation?method=deployLoop(*,${header.loopName})" />
+                                               uri="direct:load-loop" />
+                                       <split>
+                                               <simple>${exchangeProperty[loopObject].getOperationalPolicies()}
+                                               </simple>
+                                               <setProperty propertyName="operationalPolicy">
+                                                       <simple>${body}</simple>
+                                               </setProperty>
+                                               <to 
+                                                       uri="direct:get-status-from-policy" />
+                                       </split>
+                                       <to 
+                                               uri="direct:get-status-from-dcae" />
+                                       <choice>
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="policy status0: ${exchangeProperty[policyStatus]}"></log>
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="dcae status0: ${exchangeProperty[dcaeStatus]}"></log>
+                                               <when>
+                                                       <simple> ${exchangeProperty[policyStatus]} == 'SUBMITTED' and
+                                                               ${exchangeProperty[dcaeStatus]} == 'NOT_DEPLOYED'
+                                                       </simple>
+                                                       <to
+                                                               uri="direct:deploy-closedloop" />
+                                               </when>
+                                               <otherwise>
+                                                       <log
+                                                               loggingLevel="INFO"
+                                                               message="Closed Loop is in state ${exchangeProperty[policyStatus]}, it can only be deployed when in state SUBMIT" />
+                                                       <to
+                                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Closed Loop is in state ${exchangeProperty[policyStatus]}, it can only be deployed when in state SUBMIT','ERROR',${exchangeProperty[loopObject]})" />
+                                               </otherwise>
+                                       </choice>
                                        <to
                                                uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
                                        <doCatch>
                                                </handled>
                                                <to
                                                        uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                                               <log
+                                                       loggingLevel="ERROR"
+                                                       message="Deploy request failed for loop: ${header.loopName}" />
+                                               <to
+                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Deploy request failed','ERROR',${exchangeProperty[loopObject]})" />
                                        </doCatch>
                                </doTry>
                        </route>
                                        <to
                                                uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" />
                                        <to
-                                               uri="bean:org.onap.clamp.operation.LoopOperation?method=unDeployLoop(${header.loopName})" />
+                                               uri="direct:load-loop" />
+                                       <to 
+                                               uri="direct:get-status-from-dcae" />
+                                       <choice>
+                                               <when>
+                                                       <simple> ${exchangeProperty[dcaeStatus]} == 'DEPLOYED'
+                                                       </simple>
+                                                       <to
+                                                               uri="direct:undeploy-closedloop" />
+                                               </when>
+                                               <otherwise>
+                                                       <log
+                                                               loggingLevel="INFO"
+                                                               message="Closed Loop is in state ${exchangeProperty[dcaeStatus]}, it can only be undeployed when in state DEPLOYED" />
+                                                       <to
+                                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Closed Loop is in state ${exchangeProperty[dcaeStatus]}, it can only be deployed when in state DEPLOYED','ERROR',${exchangeProperty[loopObject]})" />
+                                               </otherwise>
+                                       </choice>
                                        <to
                                                uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
                                        <doCatch>
                                                </handled>
                                                <to
                                                        uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                                               <log
+                                                       loggingLevel="ERROR"
+                                                       message="Undeploy request failed for loop: $${header.loopName}" />
+                                               <to
+                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Undeploy request failed','ERROR',${exchangeProperty[loopObject]})" />
                                        </doCatch>
                                </doTry>
                        </route>
                                </doTry>
                        </route>
                </put>
+               <get
+                       uri="/v2/loop/getstatus/{loopName}"
+                       outType="org.onap.clamp.loop.Loop"
+                       produces="application/json">
+                       <route>
+                               <removeHeaders pattern="*" excludePattern="loopName"/>
+                               <doTry>
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="Get current status for loop: ${header.loopName}" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=startLog(*, 'Get the closed loop status')" />
+                                       <to
+                                               uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" />
+                                       <to uri="direct:load-loop" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Receive GET STATUS request','INFO',${exchangeProperty[loopObject]})" />
+                                       <setProperty propertyName="raiseHttpExceptionFlag">
+                                               <simple resultType="java.lang.Boolean">false</simple>
+                                       </setProperty>
+                                       <to uri="direct:get-status-from-policy" />
+                                       <to uri="direct:get-status-from-dcae" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.LoopOperation?method=updateLoopStatus(${exchangeProperty[policyStatus], ${exchangeProperty[dcaeStatus])" />
+
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="Get Status request successfully executed for loop: ${body}" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Get Status request successfully executed','INFO',${exchangeProperty[loopObject]})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.loop.LoopController?method=getLoop(${header.loopName})" />
+                                       <to
+                                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=endLog()" />
+                                       <doCatch>
+                                               <exception>java.lang.Exception</exception>
+                                               <handled>
+                                                       <constant>false</constant>
+                                               </handled>
+                                               <to
+                                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=errorLog()" />
+                                               <log
+                                                       loggingLevel="ERROR"
+                                                       message="Get Status request failed for loop: ${header.loopName}" />
+                                               <to
+                                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Get Status request failed','ERROR',${exchangeProperty[loopObject]})" />
+                                       </doCatch>
+                               </doTry>
+                       </route>
+               </get>
        </rest>
 </rests>
index 75341de..6813800 100644 (file)
                        </doFinally>
                </doTry>
        </route>
+       <route id="deploy-closedloop">
+               <from uri="direct:deploy-closedloop" />
+               <doTry>
+                       <log
+                               loggingLevel="INFO"
+                               message="Deploy the closed loop: ${exchangeProperty[loopObject].getName()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Deploy closed loop')" />
+                       <simple>${exchangeProperty[loopObject].getOperationalPolicies()}
+                       </simple>
+                       <setProperty propertyName="operationalPolicy">
+                               <simple>${body}</simple>
+                       </setProperty>
+                       <setBody>
+                               <method ref="org.onap.clamp.loop.LoopOperation"
+                                       method="getDeployPayload(${exchangeProperty[loopObject]})" />
+                       </setBody>
+                       <setProperty propertyName="deploymentId">
+                               <method ref="org.onap.clamp.loop.LoopOperation"
+                                       method="getDeploymentId(${exchangeProperty[loopObject]})" />
+                       </setProperty>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>PUT</constant>
+                       </setHeader>
+                       <setHeader headerName="Content-Type">
+                               <constant>application/json</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log
+                               loggingLevel="INFO"
+                               message="Endpoint to deploy closed loop: {{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[deploymentId]}"></log>
+                       <toD
+                               uri="{{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[deploymentId]}?bridgeEndpoint=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[RaiseHttpExceptionFlag]}&amp;httpClient.connectTimeout=10000&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}" />
+                       <to
+                               uri="bean:org.onap.clamp.loop.LoopOperation?method=updateLoopInfo(*,${exchangeProperty[loopObject]},${exchangeProperty[deploymentId]})" />
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>Deploy closed loop status</simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
 
+       <route id="undeploy-closedloop">
+               <from uri="direct:undeploy-closedloop" />
+               <doTry>
+                       <log
+                               loggingLevel="INFO"
+                               message="UNdeploy the closed loop: ${exchangeProperty[loopObject].getName()} : ${exchangeProperty[loopObject].getDcaeDeploymentId()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Undeploy closed loop')" />
+
+                       <setBody>
+                               <simple>{\"serviceTypeId\": \"${exchangeProperty[loopObject].getDcaeBlueprintId()}\"}
+                               </simple>
+                       </setBody>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>DELETE</constant>
+                       </setHeader>
+                       <setHeader headerName="Content-Type">
+                               <constant>application/json</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log
+                               loggingLevel="INFO"
+                               message="Endpoint to undeploy closed loop: {{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[loopObject].getDcaeDeploymentId()}"></log>
+                       <toD
+                               uri="{{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[loopObject].getDcaeDeploymentId()}?bridgeEndpoint=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[RaiseHttpExceptionFlag]}&amp;httpClient.connectTimeout=10000&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}" />
+                       <to
+                               uri="bean:org.onap.clamp.loop.LoopOperation?method=updateLoopInfo(*,${exchangeProperty[loopObject]},null)" />
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>Undeploy closed loop status</simple>
+                               </setProperty>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+       <route id="get-status-from-policy">
+               <from uri="direct:get-status-from-policy" />
+               <doTry>
+                       <log
+                               loggingLevel="INFO"
+                               message="Query Closed Loop status from policy DPD: ${exchangeProperty[loopObject].getName()}" />
+                       <to
+                               uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Query operational policies to PDP group')" />
+                       <setBody>
+                               <constant>null</constant>
+                       </setBody>
+                       <setHeader headerName="CamelHttpMethod">
+                               <constant>GET</constant>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-RequestID">
+                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-InvocationID">
+                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                               </simple>
+                       </setHeader>
+                       <setHeader headerName="X-ONAP-PartnerName">
+                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                               </simple>
+                       </setHeader>
+                       <log
+                               loggingLevel="INFO"
+                               message="Endpoint to query from Policy DPD: {{clamp.config.policy.pap.url}}/policy/api/v1/policytypes/onap.policies.controlloop.operational/versions/1.0.0/policies/${exchangeProperty[operationalPolicy].getName()}/versions/deployed"></log>
+                       <toD
+                               uri="{{clamp.config.policy.pap.url}}/policy/api/v1/policytypes/onap.policies.controlloop.operational/versions/1.0.0/policies/${exchangeProperty[operationalPolicy].getName()}/versions/deployed?bridgeEndpoint=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;httpClient.connectTimeout=10000&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}" />
+                       <doFinally>
+                               <to uri="direct:reset-raise-http-exception-flag" />
+                               <to
+                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                               <setProperty propertyName="logMessage">
+                                       <simple>Query closed loop from Policy status</simple>
+                               </setProperty>
+                               <setProperty propertyName="policyStatus">
+                                       <method ref="org.onap.clamp.loop.LoopOperation"
+                                       method="analysePolicyResponse(${header.CamelHttpResponseCode})" />
+                               </setProperty>
+                               <log
+                                               loggingLevel="INFO"
+                                               message="policy status: ${exchangeProperty[policyStatus]}"></log>
+                               <to uri="direct:dump-loop-log-http-response" />
+                       </doFinally>
+               </doTry>
+       </route>
+       <route id="get-status-from-dcae">
+               <from uri="direct:get-status-from-dcae" />
+               <log
+                       loggingLevel="INFO"
+                       message="Query Closed Loop status from DCAE ${exchangeProperty[loopObject].getName()}" />
+               <choice>
+                       <when>
+                               <simple>${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()} == null
+                               </simple>
+                               <setProperty propertyName="dcaeStatus">
+                                       <method ref="org.onap.clamp.loop.LoopOperation"
+                                       method="analyseDcaeResponse(*,null)" />
+                               </setProperty>
+                               <log
+                                               loggingLevel="INFO"
+                                               message="dcae status: ${exchangeProperty[dcaeStatus]}"></log>
+                       </when>
+                       <otherwise>
+                               <doTry>
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="Query Closed Loop status from Dcae" />
+                                       <setHeader headerName="CamelHttpMethod">
+                                               <constant>GET</constant>
+                                       </setHeader>
+                                       <setHeader headerName="X-ONAP-RequestID">
+                                               <simple>${exchangeProperty[X-ONAP-RequestID]}
+                                               </simple>
+                                       </setHeader>
+                                       <setHeader headerName="X-ONAP-InvocationID">
+                                               <simple>${exchangeProperty[X-ONAP-InvocationID]}
+                                               </simple>
+                                       </setHeader>
+                                       <setHeader headerName="X-ONAP-PartnerName">
+                                               <simple>${exchangeProperty[X-ONAP-PartnerName]}
+                                               </simple>
+                                       </setHeader>
+                                       <log
+                                               loggingLevel="INFO"
+                                               message="Endpoint to query Closed Loop status: ${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()}"></log>
+                                       <toD
+                                               uri="${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()}?bridgeEndpoint=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;httpClient.connectTimeout=10000&amp;authMethod=Basic&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}" />
+                                       <doFinally>
+                                               <to uri="direct:reset-raise-http-exception-flag" />
+                                               <to
+                                                       uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeReturnLog()" />
+                                               <setProperty propertyName="logMessage">
+                                                       <simple>Query closed loop from DCAE status</simple>
+                                               </setProperty>
+                                               <setProperty propertyName="dcaeStatus">
+                                                       <method ref="org.onap.clamp.loop.LoopOperation"
+                                                       method="analyseDcaeResponse(*,${header.CamelHttpResponseCode})" />
+                                               </setProperty>
+                                               <log
+                                               loggingLevel="INFO"
+                                               message="dcae status: ${exchangeProperty[dcaeStatus]}"></log>
+                                               <to uri="direct:dump-loop-log-http-response" />
+                                       </doFinally>
+                               </doTry>
+                       </otherwise>
+               </choice>
+       </route>
        <route id="reset-raise-http-exception-flag">
                <from uri="direct:reset-raise-http-exception-flag" />
                <setProperty propertyName="raiseHttpExceptionFlag">
index ecc4033..061505a 100644 (file)
@@ -217,6 +217,11 @@ clamp.config.dcae.dispatcher.url=http://localhost:${docker.http-cache.port.host}
 clamp.config.dcae.dispatcher.retry.interval=100\r
 clamp.config.dcae.dispatcher.retry.limit=1\r
 \r
+#DCAE Deployment Url Properties\r
+clamp.config.dcae.deployment.url=http4://localhost:${docker.http-cache.port.host}\r
+clamp.config.dcae.deployment.userName=test\r
+clamp.config.dcae.deployment.password=test\r
+\r
 #Define user permission related parameters, the permission type can be changed but MUST be redefined in clds-users.properties in that case !\r
 clamp.config.security.permission.type.cl=permission-type-cl\r
 clamp.config.security.permission.type.cl.manage=permission-type-cl-manage\r
index f19aa0d..0db977b 100755 (executable)
@@ -199,6 +199,18 @@ class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
         with open(cached_file_content, 'w+') as f:
                 f.write(self.data_string)
         return True
+     elif self.path.startswith("/policy/api/v1/policytypes/") and http_type == "GET":
+        print "self.path start with /policy/api/v1/policytypes/, generating response json..."
+        jsonGenerated =  "{\"policyTypeId\": \"onap.policies.controlloop.operational\",\"policyTypeVersion\": \"1.0.0\",\"policyId\": \"OPERATIONAL_z711F_v1_0_ResourceInstanceName1_tca\"}"
+        print "jsonGenerated: " + jsonGenerated
+        if not os.path.exists(cached_file_folder):
+            os.makedirs(cached_file_folder, 0777)
+
+        with open(cached_file_header, 'w') as f:
+            f.write("{\"Content-Length\": \"" + str(len(jsonGenerated)) + "\", \"Content-Type\": \"application/json\"}")
+        with open(cached_file_content, 'w') as f:
+            f.write(jsonGenerated)
+        return True
      else:
         return False