Fix issue in Menu not refreshing in crash case
Tested for SUBMIT crash case, still need to be tested
for deploy and undeploy when test can go further
Change-Id: I1f96528ab8de8fdfd399696758ba53637440782e
Signed-off-by: ehautot <eh552t@intl.att.com>
Issue-ID: CLAMP-69
diff --git a/src/main/java/org/onap/clamp/clds/service/CldsService.java b/src/main/java/org/onap/clamp/clds/service/CldsService.java
index 9bd9c41..d22a518 100644
--- a/src/main/java/org/onap/clamp/clds/service/CldsService.java
+++ b/src/main/java/org/onap/clamp/clds/service/CldsService.java
@@ -52,6 +52,7 @@
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
import javax.xml.transform.TransformerException;
import org.apache.camel.Produce;
@@ -207,7 +208,7 @@
/**
* REST service that retrieves clds healthcheck information.
- *
+ *
* @return CldsHealthCheck class containing healthcheck info
*/
@GET
@@ -396,95 +397,106 @@
@Path("/action/{action}/{modelName}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
- public CldsModel putModelAndProcessAction(@PathParam("action") String action,
+ public Response putModelAndProcessAction(@PathParam("action") String action,
@PathParam("modelName") String modelName, @QueryParam("test") String test, CldsModel model)
throws TransformerException, ParseException, GeneralSecurityException, DecoderException {
Date startTime = new Date();
- LoggingUtils.setRequestContext("CldsService: Process model action", getPrincipalName());
- String actionCd = action.toUpperCase();
- SecureServicePermission permisionManage = SecureServicePermission.create(cldsPermissionTypeClManage,
- cldsPermissionInstance, actionCd);
- isAuthorized(permisionManage);
- isAuthorizedForVf(model);
- String userId = getUserId();
- String actionStateCd = CldsEvent.ACTION_STATE_INITIATED;
- String processDefinitionKey = "clds-process-action-wf";
- logger.info("PUT actionCd={}", actionCd);
- logger.info("PUT actionStateCd={}", actionStateCd);
- logger.info("PUT processDefinitionKey={}", processDefinitionKey);
- logger.info("PUT modelName={}", modelName);
- logger.info("PUT test={}", test);
- logger.info("PUT bpmnText={}", model.getBpmnText());
- logger.info("PUT propText={}", model.getPropText());
- logger.info("PUT userId={}", userId);
- logger.info("PUT getTypeId={}", model.getTypeId());
- logger.info("PUT deploymentId={}", model.getDeploymentId());
- if (model.getTemplateName() != null) {
- CldsTemplate template = cldsDao.getTemplate(model.getTemplateName());
- if (template != null) {
- model.setTemplateId(template.getId());
- model.setDocText(template.getPropText());
- // This is to provide the Bpmn XML when Template part in UI is
- // disabled
- model.setBpmnText(template.getBpmnText());
- }
- }
- // save model to db
- model.setName(modelName);
- model.save(cldsDao, getUserId());
- // get vars and format if necessary
- String prop = model.getPropText();
- String bpmn = model.getBpmnText();
- String docText = model.getDocText();
- String controlName = model.getControlName();
- String bpmnJson = cldsBpmnTransformer.doXslTransformToString(bpmn);
- logger.info("PUT bpmnJson={}", bpmnJson);
- // Flag indicates whether it is triggered by Validation Test button from
- // UI
- boolean isTest = false;
- if (test != null && test.equalsIgnoreCase("true")) {
- isTest = true;
- } else {
- String actionTestOverride = refProp.getStringValue("action.test.override");
- if (actionTestOverride != null && actionTestOverride.equalsIgnoreCase("true")) {
- logger.info("PUT actionTestOverride={}", actionTestOverride);
- logger.info("PUT override test indicator and setting it to true");
- isTest = true;
- }
- }
- logger.info("PUT isTest={}", isTest);
- boolean isInsertTestEvent = false;
- String insertTestEvent = refProp.getStringValue("action.insert.test.event");
- if (insertTestEvent != null && insertTestEvent.equalsIgnoreCase("true")) {
- isInsertTestEvent = true;
- }
- logger.info("PUT isInsertTestEvent={}", isInsertTestEvent);
- // determine if requested action is permitted
- model.validateAction(actionCd);
- logger.info("modelProp - " + prop);
- logger.info("docText - " + docText);
+ CldsModel retrievedModel = null;
+ Boolean errorCase = false;
try {
- String result = camelProxy.submit(actionCd, prop, bpmnJson, modelName, controlName, docText, isTest, userId,
- isInsertTestEvent);
- logger.info("Starting Camel flow on request, result is: ", result);
- } catch (SdcCommunicationException | PolicyClientException | BadRequestException e) {
- logger.error("Exception occured during invoking Camel process", e);
- throw new CldsConfigException(e.getMessage(), e);
+ LoggingUtils.setRequestContext("CldsService: Process model action", getPrincipalName());
+ String actionCd = action.toUpperCase();
+ SecureServicePermission permisionManage = SecureServicePermission.create(cldsPermissionTypeClManage,
+ cldsPermissionInstance, actionCd);
+ isAuthorized(permisionManage);
+ isAuthorizedForVf(model);
+ String userId = getUserId();
+ String actionStateCd = CldsEvent.ACTION_STATE_INITIATED;
+ String processDefinitionKey = "clds-process-action-wf";
+ logger.info("PUT actionCd={}", actionCd);
+ logger.info("PUT actionStateCd={}", actionStateCd);
+ logger.info("PUT processDefinitionKey={}", processDefinitionKey);
+ logger.info("PUT modelName={}", modelName);
+ logger.info("PUT test={}", test);
+ logger.info("PUT bpmnText={}", model.getBpmnText());
+ logger.info("PUT propText={}", model.getPropText());
+ logger.info("PUT userId={}", userId);
+ logger.info("PUT getTypeId={}", model.getTypeId());
+ logger.info("PUT deploymentId={}", model.getDeploymentId());
+ if (model.getTemplateName() != null) {
+ CldsTemplate template = cldsDao.getTemplate(model.getTemplateName());
+ if (template != null) {
+ model.setTemplateId(template.getId());
+ model.setDocText(template.getPropText());
+ // This is to provide the Bpmn XML when Template part in UI is
+ // disabled
+ model.setBpmnText(template.getBpmnText());
+ }
+ }
+ // save model to db
+ model.setName(modelName);
+ model.save(cldsDao, getUserId());
+ // get vars and format if necessary
+ String prop = model.getPropText();
+ String bpmn = model.getBpmnText();
+ String docText = model.getDocText();
+ String controlName = model.getControlName();
+ String bpmnJson = cldsBpmnTransformer.doXslTransformToString(bpmn);
+ logger.info("PUT bpmnJson={}", bpmnJson);
+ // Flag indicates whether it is triggered by Validation Test button from
+ // UI
+ boolean isTest = false;
+ if (test != null && test.equalsIgnoreCase("true")) {
+ isTest = true;
+ } else {
+ String actionTestOverride = refProp.getStringValue("action.test.override");
+ if (actionTestOverride != null && actionTestOverride.equalsIgnoreCase("true")) {
+ logger.info("PUT actionTestOverride={}", actionTestOverride);
+ logger.info("PUT override test indicator and setting it to true");
+ isTest = true;
+ }
+ }
+ logger.info("PUT isTest={}", isTest);
+ boolean isInsertTestEvent = false;
+ String insertTestEvent = refProp.getStringValue("action.insert.test.event");
+ if (insertTestEvent != null && insertTestEvent.equalsIgnoreCase("true")) {
+ isInsertTestEvent = true;
+ }
+ logger.info("PUT isInsertTestEvent={}", isInsertTestEvent);
+ // determine if requested action is permitted
+ model.validateAction(actionCd);
+ logger.info("modelProp - " + prop);
+ logger.info("docText - " + docText);
+ try {
+ String result = camelProxy.submit(actionCd, prop, bpmnJson, modelName, controlName, docText, isTest, userId,
+ isInsertTestEvent);
+ logger.info("Starting Camel flow on request, result is: ", result);
+ } catch (SdcCommunicationException | PolicyClientException | BadRequestException e) {
+ errorCase = true;
+ logger.error("Exception occured during invoking Camel process", e);
+ }
+ // refresh model info from db (get fresh event info)
+ retrievedModel = CldsModel.retrieve(cldsDao, modelName, false);
+ if (!isTest && (actionCd.equalsIgnoreCase(CldsEvent.ACTION_SUBMIT)
+ || actionCd.equalsIgnoreCase(CldsEvent.ACTION_RESUBMIT)
+ || actionCd.equalsIgnoreCase(CldsEvent.ACTION_SUBMITDCAE))) {
+ // To verify inventory status and modify model status to distribute
+ dcaeInventoryServices.setEventInventory(retrievedModel, getUserId());
+ retrievedModel.save(cldsDao, getUserId());
+ }
+ // audit log
+ LoggingUtils.setTimeContext(startTime, new Date());
+ LoggingUtils.setResponseContext("0", "Process model action success", this.getClass().getName());
+ auditLogger.info("Process model action completed");
+ } catch (Exception e) {
+ errorCase = true;
+ logger.error("Exception occured during putModelAndProcessAction", e);
}
- // refresh model info from db (get fresh event info)
- CldsModel retrievedModel = CldsModel.retrieve(cldsDao, modelName, false);
- if (!isTest && (actionCd.equalsIgnoreCase(CldsEvent.ACTION_SUBMIT)
- || actionCd.equalsIgnoreCase(CldsEvent.ACTION_RESUBMIT)
- || actionCd.equalsIgnoreCase(CldsEvent.ACTION_SUBMITDCAE))) {
- // To verify inventory status and modify model status to distribute
- dcaeInventoryServices.setEventInventory(retrievedModel, getUserId());
- retrievedModel.save(cldsDao, getUserId());
+
+ if (errorCase) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(retrievedModel).build();
}
- // audit log
- LoggingUtils.setTimeContext(startTime, new Date());
- LoggingUtils.setResponseContext("0", "Process model action success", this.getClass().getName());
- auditLogger.info("Process model action completed");
- return retrievedModel;
+ return Response.status(Response.Status.OK).entity(retrievedModel).build();
}
/**
@@ -542,7 +554,7 @@
/**
* REST service that retrieves sdc services
- *
+ *
* @throws GeneralSecurityException
* In case of issue when decryting the SDC password
* @throws DecoderException
@@ -572,7 +584,7 @@
/**
* REST service that retrieves total properties required by UI
- *
+ *
* @throws IOException
* In case of issues
*/
@@ -586,7 +598,7 @@
/**
* REST service that retrieves total properties by using invariantUUID based
* on refresh and non refresh
- *
+ *
* @throws GeneralSecurityException
* In case of issues with the decryting the encrypted password
* @throws DecoderException
@@ -794,102 +806,123 @@
@Path("/deploy/{modelName}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
- public CldsModel deployModel(@PathParam("action") String action, @PathParam("modelName") String modelName,
+ public Response deployModel(@PathParam("action") String action, @PathParam("modelName") String modelName,
@QueryParam("test") String test, CldsModel model) {
Date startTime = new Date();
LoggingUtils.setRequestContext("CldsService: Deploy model", getPrincipalName());
+ Boolean errorCase = false;
try {
- checkForDuplicateServiceVf(modelName, model.getPropText());
- } catch (IOException | BadRequestException e) {
- logger.error("Exception occured during duplicate check for service and VF", e);
- throw new CldsConfigException(e.getMessage(), e);
- }
- String deploymentId = "";
- // If model is already deployed then pass same deployment id
- if (model.getDeploymentId() != null && !model.getDeploymentId().isEmpty()) {
- deploymentId = model.getDeploymentId();
- } else {
- deploymentId = "closedLoop_" + UUID.randomUUID() + "_deploymentId";
- }
- String createNewDeploymentStatusUrl = dcaeDispatcherServices.createNewDeployment(deploymentId,
- model.getTypeId());
- String operationStatus = "processing";
- long waitingTime = System.nanoTime() + TimeUnit.MINUTES.toNanos(10);
- while ("processing".equalsIgnoreCase(operationStatus)) {
- // Break the loop if waiting for more than 10 mins
- if (waitingTime < System.nanoTime()) {
- break;
+ try {
+ checkForDuplicateServiceVf(modelName, model.getPropText());
+ } catch (IOException | BadRequestException e) {
+ errorCase = true;
+ logger.error("Exception occured during duplicate check for service and VF", e);
}
- operationStatus = dcaeDispatcherServices.getOperationStatus(createNewDeploymentStatusUrl);
- }
- if ("succeeded".equalsIgnoreCase(operationStatus)) {
- String artifactName = model.getControlName();
- if (artifactName != null) {
- artifactName = artifactName + ".yml";
+ String deploymentId = "";
+ // If model is already deployed then pass same deployment id
+ if (model.getDeploymentId() != null && !model.getDeploymentId().isEmpty()) {
+ deploymentId = model.getDeploymentId();
+ } else {
+ deploymentId = "closedLoop_" + UUID.randomUUID() + "_deploymentId";
}
- DcaeEvent dcaeEvent = new DcaeEvent();
- /* set dcae events */
- dcaeEvent.setArtifactName(artifactName);
- dcaeEvent.setEvent(DcaeEvent.EVENT_DEPLOYMENT);
- CldsEvent.insEvent(cldsDao, dcaeEvent.getControlName(), getUserId(), dcaeEvent.getCldsActionCd(),
- CldsEvent.ACTION_STATE_RECEIVED, null);
- model.setDeploymentId(deploymentId);
- model.save(cldsDao, getUserId());
- } else {
- logger.info("Deploy model (" + modelName + ") failed...Operation Status is - " + operationStatus);
- throw new HttpClientErrorException(HttpStatus.INTERNAL_SERVER_ERROR,
- "Deploy model (" + modelName + ") failed...Operation Status is - " + operationStatus);
+ String createNewDeploymentStatusUrl = dcaeDispatcherServices.createNewDeployment(deploymentId,
+ model.getTypeId());
+ String operationStatus = "processing";
+ long waitingTime = System.nanoTime() + TimeUnit.MINUTES.toNanos(10);
+ while ("processing".equalsIgnoreCase(operationStatus)) {
+ // Break the loop if waiting for more than 10 mins
+ if (waitingTime < System.nanoTime()) {
+ break;
+ }
+ operationStatus = dcaeDispatcherServices.getOperationStatus(createNewDeploymentStatusUrl);
+ }
+ if ("succeeded".equalsIgnoreCase(operationStatus)) {
+ String artifactName = model.getControlName();
+ if (artifactName != null) {
+ artifactName = artifactName + ".yml";
+ }
+ DcaeEvent dcaeEvent = new DcaeEvent();
+ /* set dcae events */
+ dcaeEvent.setArtifactName(artifactName);
+ dcaeEvent.setEvent(DcaeEvent.EVENT_DEPLOYMENT);
+ CldsEvent.insEvent(cldsDao, dcaeEvent.getControlName(), getUserId(), dcaeEvent.getCldsActionCd(),
+ CldsEvent.ACTION_STATE_RECEIVED, null);
+ model.setDeploymentId(deploymentId);
+ model.save(cldsDao, getUserId());
+ } else {
+ logger.info("Deploy model (" + modelName + ") failed...Operation Status is - " + operationStatus);
+ throw new HttpClientErrorException(HttpStatus.INTERNAL_SERVER_ERROR,
+ "Deploy model (" + modelName + ") failed...Operation Status is - " + operationStatus);
+ }
+ logger.info("Deploy model (" + modelName + ") succeeded...Deployment Id is - " + deploymentId);
+ // audit log
+ LoggingUtils.setTimeContext(startTime, new Date());
+ LoggingUtils.setResponseContext("0", "Deploy model success", this.getClass().getName());
+ auditLogger.info("Deploy model completed");
+ } catch (Exception e) {
+ errorCase = true;
+ logger.error("Exception occured during deployModel", e);
}
- logger.info("Deploy model (" + modelName + ") succeeded...Deployment Id is - " + deploymentId);
- // audit log
- LoggingUtils.setTimeContext(startTime, new Date());
- LoggingUtils.setResponseContext("0", "Deploy model success", this.getClass().getName());
- auditLogger.info("Deploy model completed");
- return model;
+
+ if (errorCase) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(model).build();
+ }
+ return Response.status(Response.Status.OK).entity(model).build();
}
@PUT
@Path("/undeploy/{modelName}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
- public CldsModel unDeployModel(@PathParam("action") String action, @PathParam("modelName") String modelName,
+ public Response unDeployModel(@PathParam("action") String action, @PathParam("modelName") String modelName,
@QueryParam("test") String test, CldsModel model) {
Date startTime = new Date();
LoggingUtils.setRequestContext("CldsService: Undeploy model", getPrincipalName());
- String operationStatusUndeployUrl = dcaeDispatcherServices.deleteExistingDeployment(model.getDeploymentId(),
- model.getTypeId());
- String operationStatus = "processing";
- long waitingTime = System.nanoTime() + TimeUnit.MINUTES.toNanos(10);
- while ("processing".equalsIgnoreCase(operationStatus)) {
- if (waitingTime < System.nanoTime()) {
- break;
+
+ Boolean errorCase = false;
+ try {
+ String operationStatusUndeployUrl = dcaeDispatcherServices.deleteExistingDeployment(model.getDeploymentId(),
+ model.getTypeId());
+ String operationStatus = "processing";
+ long waitingTime = System.nanoTime() + TimeUnit.MINUTES.toNanos(10);
+ while ("processing".equalsIgnoreCase(operationStatus)) {
+ if (waitingTime < System.nanoTime()) {
+ break;
+ }
+ operationStatus = dcaeDispatcherServices.getOperationStatus(operationStatusUndeployUrl);
}
- operationStatus = dcaeDispatcherServices.getOperationStatus(operationStatusUndeployUrl);
- }
- if ("succeeded".equalsIgnoreCase(operationStatus)) {
- String artifactName = model.getControlName();
- if (artifactName != null) {
- artifactName = artifactName + ".yml";
+ if ("succeeded".equalsIgnoreCase(operationStatus)) {
+ String artifactName = model.getControlName();
+ if (artifactName != null) {
+ artifactName = artifactName + ".yml";
+ }
+ DcaeEvent dcaeEvent = new DcaeEvent();
+ // set dcae events
+ dcaeEvent.setArtifactName(artifactName);
+ dcaeEvent.setEvent(DcaeEvent.EVENT_UNDEPLOYMENT);
+ CldsEvent.insEvent(cldsDao, model.getControlName(), getUserId(), dcaeEvent.getCldsActionCd(),
+ CldsEvent.ACTION_STATE_RECEIVED, null);
+ model.setDeploymentId(null);
+ model.save(cldsDao, getUserId());
+ } else {
+ logger.info("Undeploy model (" + modelName + ") failed...Operation Status is - " + operationStatus);
+ throw new HttpClientErrorException(HttpStatus.INTERNAL_SERVER_ERROR,
+ "Undeploy model (" + modelName + ") failed...Operation Status is - " + operationStatus);
}
- DcaeEvent dcaeEvent = new DcaeEvent();
- // set dcae events
- dcaeEvent.setArtifactName(artifactName);
- dcaeEvent.setEvent(DcaeEvent.EVENT_UNDEPLOYMENT);
- CldsEvent.insEvent(cldsDao, model.getControlName(), getUserId(), dcaeEvent.getCldsActionCd(),
- CldsEvent.ACTION_STATE_RECEIVED, null);
- model.setDeploymentId(null);
- model.save(cldsDao, getUserId());
- } else {
- logger.info("Undeploy model (" + modelName + ") failed...Operation Status is - " + operationStatus);
- throw new HttpClientErrorException(HttpStatus.INTERNAL_SERVER_ERROR,
- "Undeploy model (" + modelName + ") failed...Operation Status is - " + operationStatus);
+ logger.info("Undeploy model (" + modelName + ") succeeded.");
+ // audit log
+ LoggingUtils.setTimeContext(startTime, new Date());
+ LoggingUtils.setResponseContext("0", "Undeploy model success", this.getClass().getName());
+ auditLogger.info("Undeploy model completed");
+ } catch (Exception e) {
+ errorCase = true;
+ logger.error("Exception occured during unDeployModel", e);
}
- logger.info("Undeploy model (" + modelName + ") succeeded.");
- // audit log
- LoggingUtils.setTimeContext(startTime, new Date());
- LoggingUtils.setResponseContext("0", "Undeploy model success", this.getClass().getName());
- auditLogger.info("Undeploy model completed");
- return model;
+
+ if (errorCase) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(model).build();
+ }
+ return Response.status(Response.Status.OK).entity(model).build();
}
private void checkForDuplicateServiceVf(String modelName, String modelPropText) throws IOException {
diff --git a/src/main/resources/META-INF/resources/designer/scripts/CldsModelService.js b/src/main/resources/META-INF/resources/designer/scripts/CldsModelService.js
index f6092b8..0887550 100644
--- a/src/main/resources/META-INF/resources/designer/scripts/CldsModelService.js
+++ b/src/main/resources/META-INF/resources/designer/scripts/CldsModelService.js
@@ -214,6 +214,7 @@
})
.error(function(data) {
+ def.resolve(data);
alertService.alertMessage("Action Failure:" + uiAction, 2);
//def alertService.alertMessage("Action Successful:"+uiAction,1);
def.reject(svcAction + " not successful");