update progress by http request 17/21117/1
authorZhuoyao Huang <10112215@zte.com.cn>
Sat, 28 Oct 2017 06:42:04 +0000 (14:42 +0800)
committerZhuoyao Huang <10112215@zte.com.cn>
Sat, 28 Oct 2017 06:42:04 +0000 (14:42 +0800)
Change-Id: I0706639eb4d4638fbccf790d67df594b504808b2
Issue-ID:SO-181
Signed-off-by: Zhuoyao Huang <10112215@zte.com.cn>
bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/workflow/serviceTask/AbstractSdncOperationTask.java
bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/workflow/serviceTask/SdncNetworkTopologyOperationTask.java
bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/workflow/serviceTask/SdncServiceTopologyOperationTask.java
bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/workflow/serviceTask/SdncUnderlayVpnPreprocessTask.java

index c52c3b2..f6f8fd2 100644 (file)
 package org.openecomp.mso.bpmn.infrastructure.workflow.serviceTask;
 
 import org.apache.commons.lang3.StringUtils;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
 import org.camunda.bpm.engine.delegate.DelegateExecution;
 import org.json.JSONObject;
+import org.onap.msb.sdk.discovery.common.RouteException;
 import org.onap.msb.sdk.httpclient.RestServiceCreater;
 import org.onap.msb.sdk.httpclient.msb.MSBServiceClient;
 import org.openecomp.mso.bpmn.core.BaseTask;
@@ -34,6 +44,7 @@ import org.openecomp.mso.requestsdb.RequestsDatabase;
 import org.openecomp.mso.requestsdb.RequestsDbConstant;
 import org.openecomp.mso.requestsdb.ResourceOperationStatus;
 
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -48,19 +59,204 @@ public abstract class AbstractSdncOperationTask extends BaseTask {
     public static final String ONAP_IP = "ONAP_IP";
     private RequestsDatabase requestsDB = RequestsDatabase.getInstance();
 
+    private static final String postBodyTemplate = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns=\"http://org.openecomp.mso/requestsdb\"><soapenv:Header/><soapenv:Body>\n"+
+            "     <ns:updateResourceOperationStatus>\n"+
+            "                <errorCode>$errorCode</errorCode>\n"+
+            "                <jobId>$jobId</jobId>\n"+
+            "                <operType>$operType</operType>\n"+
+            "                <operationId>$operationId</operationId>\n"+
+            "                <progress>$progress</progress>\n"+
+            "                <resourceTemplateUUID>$resourceTemplateUUID</resourceTemplateUUID>\n"+
+            "                <serviceId>$serviceId</serviceId>\n"+
+            "                <status>$status</status>\n"+
+            "                <statusDescription>$statusDescription</statusDescription>\n"+
+            "     </ns:updateResourceOperationStatus></soapenv:Body></soapenv:Envelope>";
+
+
+    private void updateResOperStatus(ResourceOperationStatus resourceOperationStatus) throws RouteException {
+        CloseableHttpClient httpClient = HttpClients.createDefault();
+        String url = "http://mso:8080/dbadapters/RequestsDbAdapter";
+        HttpPost httpPost = new HttpPost(url);
+        httpPost.addHeader("Authorization", "Basic QlBFTENsaWVudDpwYXNzd29yZDEk");
+        httpPost.addHeader("Content-type", "application/soap+xml");
+        String postBody = getStringBody(resourceOperationStatus);
+        httpPost.setEntity(new StringEntity(postBody, ContentType.APPLICATION_XML));
+        String result;
+        boolean var15 = false;
+
+        String errorMsg;
+        label91: {
+            try {
+                var15 = true;
+                CloseableHttpResponse closeableHttpResponse = httpClient.execute(httpPost);
+                result = EntityUtils.toString(closeableHttpResponse.getEntity());
+                if(closeableHttpResponse.getStatusLine().getStatusCode() != 200) {
+                    throw new RouteException(result, "SERVICE_GET_ERR");
+                }
+
+                closeableHttpResponse.close();
+                var15 = false;
+                break label91;
+            } catch (IOException var19) {
+                errorMsg = url + ":httpPostWithJSON connect faild";
+                throwsRouteException(errorMsg, var19, "POST_CONNECT_FAILD");
+                var15 = false;
+            } finally {
+                if(var15) {
+                    try {
+                        httpClient.close();
+                    } catch (IOException var16) {
+                        String errorMsg1 = url + ":close  httpClient faild";
+                        throwsRouteException(errorMsg1, var16, "CLOSE_CONNECT_FAILD");
+                    }
+
+                }
+            }
+
+            try {
+                httpClient.close();
+            } catch (IOException var17) {
+                errorMsg = url + ":close  httpClient faild";
+                throwsRouteException(errorMsg, var17, "CLOSE_CONNECT_FAILD");
+            }
+        }
+
+        try {
+            httpClient.close();
+        } catch (IOException var18) {
+            errorMsg = url + ":close  httpClient faild";
+            throwsRouteException(errorMsg, var18, "CLOSE_CONNECT_FAILD");
+        }
+
+        //requestsDB.updateResOperStatus(resourceOperationStatus);
+    }
+
+    private static void throwsRouteException(String errorMsg, Exception e, String errorCode) throws RouteException {
+        String msg = errorMsg + ".errorMsg:" + e.getMessage();
+        throw new RouteException(errorMsg, errorCode);
+    }
+
+    private String getStringBody(ResourceOperationStatus resourceOperationStatus) {
+        String postBody = new String(postBodyTemplate);
+        postBody.replace("$errorCode", resourceOperationStatus.getErrorCode());
+        postBody.replace("$jobId", resourceOperationStatus.getJobId());
+        postBody.replace("$operType", resourceOperationStatus.getOperType());
+        postBody.replace("$operationId", resourceOperationStatus.getOperationId());
+        postBody.replace("$progress", resourceOperationStatus.getProgress());
+        postBody.replace("$resourceTemplateUUID", resourceOperationStatus.getResourceTemplateUUID());
+        postBody.replace("$serviceId", resourceOperationStatus.getServiceId());
+        postBody.replace("$status", resourceOperationStatus.getStatus());
+        postBody.replace("$statusDescription", resourceOperationStatus.getStatusDescription());
+        return postBody;
+    }
+
+    private ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID) throws RouteException {
+        CloseableHttpClient httpClient = HttpClients.createDefault();
+        String url = "http://mso:8080/dbadapters/RequestsDbAdapter";
+        HttpGet httpGet = new HttpGet(url);
+        httpGet.setHeader("Authorization", "Basic QlBFTENsaWVudDpwYXNzd29yZDEk");
+        httpGet.setHeader("Content-type", "application/soap+xml");
+        boolean var16 = false;
+        String result="";
+        String errorMsg;
+        label109: {
+            label110: {
+                try {
+                    var16 = true;
+                    CloseableHttpResponse e = httpClient.execute(httpGet);
+                    result = EntityUtils.toString(e.getEntity());
+                    if(e.getStatusLine().getStatusCode() != 200) {
+                        throw new RouteException(result, "SERVICE_GET_ERR");
+                    }
+
+                    e.close();
+                    var16 = false;
+                    break label110;
+                } catch (ClientProtocolException var21) {
+                    errorMsg = url + ":httpGetWithJSON connect faild";
+                    throwsRouteException(errorMsg, var21, "GET_CONNECT_FAILD");
+                    var16 = false;
+                } catch (IOException var22) {
+                    errorMsg = url + ":httpGetWithJSON connect faild";
+                    throwsRouteException(errorMsg, var22, "GET_CONNECT_FAILD");
+                    var16 = false;
+                    break label109;
+                } finally {
+                    if(var16) {
+                        try {
+                            httpClient.close();
+                        } catch (IOException var17) {
+                            String errorMsg1 = url + ":close  httpClient faild";
+                            throwsRouteException(errorMsg1, var17, "CLOSE_CONNECT_FAILD");
+                        }
+
+                    }
+                }
+
+                try {
+                    httpClient.close();
+                } catch (IOException var19) {
+                    errorMsg = url + ":close  httpClient faild";
+                    throwsRouteException(errorMsg, var19, "CLOSE_CONNECT_FAILD");
+                }
+
+            }
+
+            try {
+                httpClient.close();
+            } catch (IOException var20) {
+                errorMsg = url + ":close  httpClient faild";
+                throwsRouteException(errorMsg, var20, "CLOSE_CONNECT_FAILD");
+            }
+
+        }
+
+        try {
+            httpClient.close();
+        } catch (IOException var18) {
+            errorMsg = url + ":close  httpClient faild";
+            throwsRouteException(errorMsg, var18, "CLOSE_CONNECT_FAILD");
+        }
+
+        ResourceOperationStatus resourceOperationStatus = getResourceOperationStatusFromXmlString(result);
+
+        return resourceOperationStatus;
+
+        //return requestsDB.getResourceOperationStatus(serviceId, operationId, resourceTemplateUUID);
+    }
+
+    private ResourceOperationStatus getResourceOperationStatusFromXmlString(String result) {
+        ResourceOperationStatus resourceOperationStatus = new ResourceOperationStatus();
+        resourceOperationStatus.setErrorCode(getValueByName("errorCode", result));
+        resourceOperationStatus.setJobId(getValueByName("jobId", result));
+        resourceOperationStatus.setOperType(getValueByName("operType", result));
+        resourceOperationStatus.setOperationId(getValueByName("operationId", result));
+        resourceOperationStatus.setProgress(getValueByName("progress", result));
+        resourceOperationStatus.setResourceTemplateUUID(getValueByName("resourceTemplateUUID", result));
+        resourceOperationStatus.setServiceId(getValueByName("serviceId", result));
+        resourceOperationStatus.setStatus(getValueByName("status", result));
+        resourceOperationStatus.setStatusDescription(getValueByName("statusDescription", result));
+        return resourceOperationStatus;
+    }
+
+    private String getValueByName(String Name, String xml) {
+        String start = "<" + Name + ">";
+        String end = "</" + Name + ">";
+        return xml.substring(xml.indexOf(start), xml.indexOf(end)).replace(start, "");
+    }
 
     private static MsoLogger logger = MsoLogger.getMsoLogger(MsoLogger.Catalog.GENERAL);
 
     @Override
     public void execute(DelegateExecution execution) {
         GenericResourceApi genericResourceApiClient = getGenericResourceApiClient(execution);
-        updateProgress(execution, RequestsDbConstant.Status.PROCESSING, null, "10", "execute begin!");
+//        updateProgress(execution, RequestsDbConstant.Status.PROCESSING, null, "10", "execute begin!");
         Map<String, String> inputs = getInputs(execution);
-        updateProgress(execution, null, null, "30", "getGenericResourceApiClient finished!");
+//        updateProgress(execution, null, null, "30", "getGenericResourceApiClient finished!");
         try {
             sendRestrequestAndHandleResponse(execution, inputs, genericResourceApiClient);
             execution.setVariable("SDNCA_SuccessIndicator", true);
-            updateProgress(execution, RequestsDbConstant.Status.FINISHED, null, RequestsDbConstant.Progress.ONE_HUNDRED, "execute finished!");
+//            updateProgress(execution, RequestsDbConstant.Status.FINISHED, null, RequestsDbConstant.Progress.ONE_HUNDRED, "execute finished!");
         } catch (Exception e) {
             e.printStackTrace();
             execution.setVariable("SDNCA_SuccessIndicator", false);
@@ -87,39 +283,55 @@ public abstract class AbstractSdncOperationTask extends BaseTask {
                                String statusDescription) {
         String serviceId = (String) execution.getVariable("serviceId");
         String operationId = (String) execution.getVariable("operationId");
-        String resourceTemplateUUID = (String) execution.getVariable("resourceTemplateUUID");
-        ResourceOperationStatus resourceOperationStatus = requestsDB.getResourceOperationStatus(serviceId, operationId, resourceTemplateUUID);
-        if (!StringUtils.isBlank(status)) {
-            resourceOperationStatus.setStatus(status);
-        }
-        if (!StringUtils.isBlank(errorCode)) {
-            resourceOperationStatus.setErrorCode(errorCode);
-        }
-        if (!StringUtils.isBlank(progress)) {
-            resourceOperationStatus.setProgress(progress);
-        }
-        if (!StringUtils.isBlank(statusDescription)) {
-            resourceOperationStatus.setStatusDescription(statusDescription);
+        String resourceTemplateUUID = (String) execution.getVariable("resourceUUID");
+        try {
+            ResourceOperationStatus resourceOperationStatus = getResourceOperationStatus(serviceId, operationId, resourceTemplateUUID);
+            if (!StringUtils.isBlank(status)) {
+                resourceOperationStatus.setStatus(status);
+            }
+            if (!StringUtils.isBlank(errorCode)) {
+                resourceOperationStatus.setErrorCode(errorCode);
+            }
+            if (!StringUtils.isBlank(progress)) {
+                resourceOperationStatus.setProgress(progress);
+            }
+            if (!StringUtils.isBlank(statusDescription)) {
+                resourceOperationStatus.setStatusDescription(statusDescription);
+            }
+            updateResOperStatus(resourceOperationStatus);
+        } catch (Exception exception) {
+            System.out.println(exception);
+            logger.error(MessageEnum.GENERAL_EXCEPTION, " updateProgress catch exception: ", "", this.getTaskName(), MsoLogger.ErrorCode.UnknownError, exception.getClass().toString());
         }
-        requestsDB.updateResOperStatus(resourceOperationStatus);
     }
 
     private GenericResourceApi getGenericResourceApiClient(DelegateExecution execution) {
-        updateProgress(execution, null, null, "20", "getGenericResourceApiClient begin!");
+//        updateProgress(execution, null, null, "20", "getGenericResourceApiClient begin!");
         String msbIp = System.getenv().get(ONAP_IP);
         int msbPort = DEFAULT_MSB_Port;
         Map<String, String> properties = PropertyConfiguration.getInstance().getProperties("mso.bpmn.urn.properties");
         if (properties != null) {
-            if (StringUtils.isBlank(msbIp)) {
-                msbIp = getString(properties, "msb.address", DEFAULT_MSB_IP);
+            if (StringUtils.isBlank(msbIp) || !isIp(msbIp)) {
+                msbIp = properties.get("msb-ip");
+                if (StringUtils.isBlank(msbIp)) {
+                    msbIp = getString(properties, "msb.address", DEFAULT_MSB_IP);
+                }
             }
-            msbPort = Integer.valueOf(getString(properties, "msb.port", String.valueOf(DEFAULT_MSB_Port)));
+            String strMsbPort = properties.get("msb-port");
+            if (StringUtils.isBlank(strMsbPort)) {
+                strMsbPort = getString(properties, "msb.port", String.valueOf(DEFAULT_MSB_Port));
+            }
+            msbPort = Integer.valueOf(strMsbPort);
         }
         MSBServiceClient msbClient = new MSBServiceClient(msbIp, msbPort);
         RestServiceCreater restServiceCreater = new RestServiceCreater(msbClient);
         return restServiceCreater.createService(GenericResourceApi.class);
     }
 
+    protected boolean isIp(String msbIp) {
+        return !StringUtils.isBlank(msbIp) && msbIp.split("\\.").length == 4;
+    }
+
     private String getString(Map<String, String> properties, String name, String defaultValue) {
         String vlaue = properties.get(name);
         try {
index 9e0b4f7..e72bf8a 100644 (file)
@@ -58,6 +58,8 @@ public class SdncNetworkTopologyOperationTask extends AbstractSdncOperationTask
             updateProgress(execution, RequestsDbConstant.Status.ERROR, String.valueOf(errorCode), null, errorMessage);
             throw new Exception("");
         }
+        updateProgress(execution, RequestsDbConstant.Status.FINISHED, null, RequestsDbConstant.Progress.ONE_HUNDRED, "execute finished!");
+
     }
 
 }
index d6ccc8b..bea7a12 100644 (file)
@@ -40,12 +40,12 @@ public class SdncServiceTopologyOperationTask extends AbstractSdncOperationTask
     public void sendRestrequestAndHandleResponse(DelegateExecution execution,
                                                  Map<String, String> inputs,
                                                  GenericResourceApi genericResourceApiClient) throws Exception {
-        updateProgress(execution, null, null, "40", "sendRestrequestAndHandleResponse begin!");
+//        updateProgress(execution, null, null, "40", "sendRestrequestAndHandleResponse begin!");
         ServiceRpcInputEntityBuilder builder = new ServiceRpcInputEntityBuilder();
         RpcServiceTopologyOperationInputEntity inputEntity = builder.build(execution, inputs);
-        updateProgress(execution, null, null, "50", "RequestBody build finished!");
+//        updateProgress(execution, null, null, "50", "RequestBody build finished!");
         RpcServiceTopologyOperationOutputEntity outputEntity = genericResourceApiClient.postServiceTopologyOperation(inputEntity).execute().body();
-        updateProgress(execution, null, null, "90", "sendRestrequestAndHandleResponse finished!");
+//        updateProgress(execution, null, null, "90", "sendRestrequestAndHandleResponse finished!");
         saveOutput(execution, outputEntity);
     }
 
@@ -57,7 +57,7 @@ public class SdncServiceTopologyOperationTask extends AbstractSdncOperationTask
             String errorMessage = output.getOutput().getResponseMessage();
             WorkflowException workflowException = new WorkflowException(processKey, errorCode, errorMessage);
             execution.setVariable("SDNCA_SuccessIndicator", workflowException);
-            updateProgress(execution, RequestsDbConstant.Status.ERROR, String.valueOf(errorCode), null, errorMessage);
+//            updateProgress(execution, RequestsDbConstant.Status.ERROR, String.valueOf(errorCode), null, errorMessage);
             throw new Exception("");
         }
     }
index 49ded45..119ac42 100644 (file)
@@ -41,7 +41,7 @@ public class SdncUnderlayVpnPreprocessTask extends BaseTask {
     private String getOperType(DelegateExecution execution) {
         String serviceId = (String) execution.getVariable("serviceId");
         String operationId = (String) execution.getVariable("operationId");
-        String resourceTemplateUUID = (String) execution.getVariable("resourceTemplateUUID");
+        String resourceTemplateUUID = (String) execution.getVariable("resourceUUID");
         ResourceOperationStatus resourceOperationStatus = requestsDB.getResourceOperationStatus(serviceId, operationId, resourceTemplateUUID);
         return resourceOperationStatus.getOperType();
     }