* limitations under the License.
* ============LICENSE_END============================================
* ===================================================================
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ *
*/
package org.onap.clamp.clds.service;
import java.io.IOException;
import java.io.InputStream;
import java.security.GeneralSecurityException;
-import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
private SecureServicePermission permissionUpdateCl;
private SecureServicePermission permissionReadTemplate;
private SecureServicePermission permissionUpdateTemplate;
+ private static final long DCAE_DEPLOY_WAITING_TIME = TimeUnit.SECONDS.toNanos(30);
@PostConstruct
private final void afterConstruction() {
public List<CldsMonitoringDetails> getCLDSDetails() {
Date startTime = new Date();
LoggingUtils.setRequestContext("CldsService: GET model details", getPrincipalName());
- List<CldsMonitoringDetails> cldsMonitoringDetailsList = new ArrayList<CldsMonitoringDetails>();
- cldsMonitoringDetailsList = cldsDao.getCLDSMonitoringDetails();
+ List<CldsMonitoringDetails> cldsMonitoringDetailsList = cldsDao.getCLDSMonitoringDetails();
// audit log
LoggingUtils.setTimeContext(startTime, new Date());
LoggingUtils.setResponseContext("0", "Get cldsDetails success", this.getClass().getName());
@GET
@Path("/healthcheck")
@Produces(MediaType.APPLICATION_JSON)
- public CldsHealthCheck gethealthcheck() {
+ public Response gethealthcheck() {
CldsHealthCheck cldsHealthCheck = new CldsHealthCheck();
Date startTime = new Date();
- LoggingUtils.setRequestContext("CldsService: GET healthcheck", getPrincipalName());
+ LoggingUtils.setRequestContext("CldsService: GET healthcheck", "Clamp-Health-Check");
LoggingUtils.setTimeContext(startTime, new Date());
+ boolean healthcheckFailed = false;
try {
cldsDao.doHealthCheck();
cldsHealthCheck.setHealthCheckComponent("CLDS-APP");
cldsHealthCheck.setHealthCheckStatus("UP");
cldsHealthCheck.setDescription("OK");
+ LoggingUtils.setResponseContext("0", "Get healthcheck success", this.getClass().getName());
} catch (Exception e) {
+ healthcheckFailed = true;
logger.error("CLAMP application DB Error", e);
+ LoggingUtils.setResponseContext("999", "Get healthcheck failed", this.getClass().getName());
cldsHealthCheck.setHealthCheckComponent("CLDS-APP");
cldsHealthCheck.setHealthCheckStatus("DOWN");
cldsHealthCheck.setDescription("NOT-OK");
}
// audit log
LoggingUtils.setTimeContext(startTime, new Date());
- LoggingUtils.setResponseContext("0", "Get healthcheck success", this.getClass().getName());
- securityLogger.info("GET healthcheck completed");
- return cldsHealthCheck;
+ logger.info("GET healthcheck completed");
+ if (healthcheckFailed) {
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(cldsHealthCheck).build();
+ } else {
+ return Response.status(Response.Status.OK).entity(cldsHealthCheck).build();
+ }
}
/**
return names;
}
+ private void fillInCldsModel(CldsModel model) {
+ 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());
+ }
+ }
+ }
+
/**
* REST service that saves and processes an action for a CLDS model by name.
*
@Produces(MediaType.APPLICATION_JSON)
public Response putModelAndProcessAction(@PathParam("action") String action,
@PathParam("modelName") String modelName, @QueryParam("test") String test, CldsModel model)
- throws TransformerException, ParseException, GeneralSecurityException, DecoderException {
+ throws TransformerException, ParseException {
Date startTime = new Date();
CldsModel retrievedModel = null;
Boolean errorCase = false;
isAuthorized(permisionManage);
isAuthorizedForVf(model);
String userId = getUserId();
- String actionStateCd = CldsEvent.ACTION_STATE_INITIATED;
logger.info("PUT actionCd={}", actionCd);
- logger.info("PUT actionStateCd={}", actionStateCd);
logger.info("PUT modelName={}", modelName);
logger.info("PUT test={}", test);
logger.info("PUT bpmnText={}", model.getBpmnText());
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());
- }
- }
+ this.fillInCldsModel(model);
// save model to db
model.setName(modelName);
model.save(cldsDao, getUserId());
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 (retrievedModel.getDeploymentId() == null) {
+ // This should be done only when the call to DCAE
+ // has not yet been done. When CL comes from SDC
+ // this is not required as the DCAE inventory call is done
+ // during the CL deployment.
+ dcaeInventoryServices.setEventInventory(retrievedModel, getUserId());
+ retrievedModel.save(cldsDao, getUserId());
+ } else {
+ logger.info("Skipping DCAE inventory call as closed loop has been created from SDC notification");
+ }
}
// audit log
LoggingUtils.setTimeContext(startTime, new Date());
Date startTime = new Date();
LoggingUtils.setRequestContext("CldsService: GET sdc services", getPrincipalName());
String retStr;
- String responseStr = sdcCatalogServices.getSdcServicesInformation(null);
try {
- retStr = createUiServiceFormatJson(responseStr);
+ retStr = createUiServiceFormatJson(sdcCatalogServices.getSdcServicesInformation(null));
} catch (IOException e) {
logger.error("IOException during SDC communication", e);
throw new SdcCommunicationException("IOException during SDC communication", e);
LoggingUtils.setRequestContext("CldsService: Deploy model", getPrincipalName());
Boolean errorCase = false;
try {
- try {
- checkForDuplicateServiceVf(modelName, model.getPropText());
- } catch (IOException | BadRequestException e) {
- errorCase = true;
- logger.error("Exception occured during duplicate check for service and VF", e);
- }
+ fillInCldsModel(model);
+ String bpmnJson = cldsBpmnTransformer.doXslTransformToString(model.getBpmnText());
+ logger.info("PUT bpmnJson={}", bpmnJson);
+ ModelProperties modelProp = new ModelProperties(modelName, model.getControlName(), CldsEvent.ACTION_DEPLOY,
+ false, bpmnJson, model.getPropText());
+ checkForDuplicateServiceVf(modelName, model.getPropText());
String deploymentId = "";
// If model is already deployed then pass same deployment id
if (model.getDeploymentId() != null && !model.getDeploymentId().isEmpty()) {
deploymentId = "closedLoop_" + UUID.randomUUID() + "_deploymentId";
}
String createNewDeploymentStatusUrl = dcaeDispatcherServices.createNewDeployment(deploymentId,
- model.getTypeId());
+ model.getTypeId(), modelProp.getGlobal().getDeployParameters());
String operationStatus = "processing";
- long waitingTime = System.nanoTime() + TimeUnit.MINUTES.toNanos(10);
+ long waitingTime = System.nanoTime() + DCAE_DEPLOY_WAITING_TIME;
while ("processing".equalsIgnoreCase(operationStatus)) {
- // Break the loop if waiting for more than 10 mins
if (waitingTime < System.nanoTime()) {
+ logger.info("Waiting is over for DCAE deployment");
break;
}
+ logger.info("Waiting 5s before sending query to DCAE");
+ Thread.sleep(5000);
operationStatus = dcaeDispatcherServices.getOperationStatus(createNewDeploymentStatusUrl);
}
if ("succeeded".equalsIgnoreCase(operationStatus)) {
if (service != null && resourceVf != null && !resourceVf.isEmpty()) {
List<CldsModelProp> cldsModelPropList = cldsDao.getDeployedModelProperties();
for (CldsModelProp cldsModelProp : cldsModelPropList) {
- JsonNode currentNode = JacksonUtils.getObjectMapperInstance().readTree(cldsModelProp.getPropText()).get("global");
+ JsonNode currentNode = JacksonUtils.getObjectMapperInstance().readTree(cldsModelProp.getPropText())
+ .get("global");
String currentService = AbstractModelElement.getValueByName(currentNode, "service");
List<String> currentVf = AbstractModelElement.getValuesByName(currentNode, "vf");
if (currentVf != null && !currentVf.isEmpty()) {