From 9d480cc0089e139c77c772c57fdd0432e52b5bdd Mon Sep 17 00:00:00 2001 From: Zhuoyao Huang <10112215@zte.com.cn> Date: Sat, 28 Oct 2017 14:42:04 +0800 Subject: update progress by http request Change-Id: I0706639eb4d4638fbccf790d67df594b504808b2 Issue-ID:SO-181 Signed-off-by: Zhuoyao Huang <10112215@zte.com.cn> --- .../serviceTask/AbstractSdncOperationTask.java | 254 +++++++++++++++++++-- .../SdncNetworkTopologyOperationTask.java | 2 + .../SdncServiceTopologyOperationTask.java | 8 +- .../serviceTask/SdncUnderlayVpnPreprocessTask.java | 2 +- 4 files changed, 240 insertions(+), 26 deletions(-) diff --git a/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/workflow/serviceTask/AbstractSdncOperationTask.java b/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/workflow/serviceTask/AbstractSdncOperationTask.java index c52c3b2f14..f6f8fd25dd 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/workflow/serviceTask/AbstractSdncOperationTask.java +++ b/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/workflow/serviceTask/AbstractSdncOperationTask.java @@ -21,8 +21,18 @@ 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 = "\n"+ + " \n"+ + " $errorCode\n"+ + " $jobId\n"+ + " $operType\n"+ + " $operationId\n"+ + " $progress\n"+ + " $resourceTemplateUUID\n"+ + " $serviceId\n"+ + " $status\n"+ + " $statusDescription\n"+ + " "; + + + 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 = ""; + 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 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 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 properties, String name, String defaultValue) { String vlaue = properties.get(name); try { diff --git a/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/workflow/serviceTask/SdncNetworkTopologyOperationTask.java b/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/workflow/serviceTask/SdncNetworkTopologyOperationTask.java index 9e0b4f7806..e72bf8aea8 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/workflow/serviceTask/SdncNetworkTopologyOperationTask.java +++ b/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/workflow/serviceTask/SdncNetworkTopologyOperationTask.java @@ -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!"); + } } diff --git a/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/workflow/serviceTask/SdncServiceTopologyOperationTask.java b/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/workflow/serviceTask/SdncServiceTopologyOperationTask.java index d6ccc8b03b..bea7a129fa 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/workflow/serviceTask/SdncServiceTopologyOperationTask.java +++ b/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/workflow/serviceTask/SdncServiceTopologyOperationTask.java @@ -40,12 +40,12 @@ public class SdncServiceTopologyOperationTask extends AbstractSdncOperationTask public void sendRestrequestAndHandleResponse(DelegateExecution execution, Map 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(""); } } diff --git a/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/workflow/serviceTask/SdncUnderlayVpnPreprocessTask.java b/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/workflow/serviceTask/SdncUnderlayVpnPreprocessTask.java index 49ded45b4a..119ac42e76 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/workflow/serviceTask/SdncUnderlayVpnPreprocessTask.java +++ b/bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/workflow/serviceTask/SdncUnderlayVpnPreprocessTask.java @@ -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(); } -- cgit 1.2.3-korg