2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.mso.apihandlerinfra;
23 import java.io.IOException;
24 import java.util.ArrayList;
25 import java.util.HashMap;
26 import java.util.List;
29 import javax.ws.rs.Consumes;
30 import javax.ws.rs.DELETE;
31 import javax.ws.rs.GET;
32 import javax.ws.rs.POST;
33 import javax.ws.rs.PUT;
34 import javax.ws.rs.Path;
35 import javax.ws.rs.PathParam;
36 import javax.ws.rs.Produces;
37 import javax.ws.rs.core.MediaType;
38 import javax.ws.rs.core.Response;
40 import org.apache.http.HttpResponse;
41 import org.apache.http.HttpStatus;
42 import org.json.JSONObject;
43 import org.openecomp.mso.apihandler.common.ErrorNumbers;
44 import org.openecomp.mso.apihandler.common.RequestClient;
45 import org.openecomp.mso.apihandler.common.RequestClientFactory;
46 import org.openecomp.mso.apihandler.common.RequestClientParamater;
47 import org.openecomp.mso.apihandler.common.ResponseHandler;
48 import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.CompareModelsRequest;
49 import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.E2EServiceInstanceDeleteRequest;
50 import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.E2EServiceInstanceRequest;
51 import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.E2EServiceInstanceScaleRequest;
52 import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.GetE2EServiceInstanceResponse;
53 import org.openecomp.mso.db.catalog.CatalogDatabase;
54 import org.openecomp.mso.db.catalog.beans.Service;
55 import org.openecomp.mso.db.catalog.beans.ServiceRecipe;
56 import org.openecomp.mso.logger.MessageEnum;
57 import org.openecomp.mso.logger.MsoAlarmLogger;
58 import org.openecomp.mso.logger.MsoLogger;
59 import org.openecomp.mso.requestsdb.OperationStatus;
60 import org.openecomp.mso.requestsdb.RequestsDatabase;
61 import org.openecomp.mso.serviceinstancebeans.ModelInfo;
62 import org.openecomp.mso.serviceinstancebeans.ModelType;
63 import org.openecomp.mso.serviceinstancebeans.RequestDetails;
64 import org.openecomp.mso.serviceinstancebeans.RequestInfo;
65 import org.openecomp.mso.serviceinstancebeans.RequestParameters;
66 import org.openecomp.mso.serviceinstancebeans.ServiceInstancesRequest;
67 import org.openecomp.mso.serviceinstancebeans.SubscriberInfo;
68 import org.openecomp.mso.utils.UUIDChecker;
70 import com.fasterxml.jackson.databind.ObjectMapper;
71 import com.wordnik.swagger.annotations.Api;
72 import com.wordnik.swagger.annotations.ApiOperation;
74 @Path("/e2eServiceInstances")
75 @Api(value = "/e2eServiceInstances", description = "API Requests for E2E Service Instances")
76 public class E2EServiceInstances {
78 private HashMap<String, String> instanceIdMap = new HashMap<>();
79 private static MsoLogger msoLogger = MsoLogger
80 .getMsoLogger(MsoLogger.Catalog.APIH);
81 private static MsoAlarmLogger alarmLogger = new MsoAlarmLogger();
82 public static final String MSO_PROP_APIHANDLER_INFRA = "MSO_PROP_APIHANDLER_INFRA";
83 private ServiceInstancesRequest sir = null;
85 public static final String END_OF_THE_TRANSACTION = "End of the transaction, the final response is: ";
88 * POST Requests for E2E Service create Instance on a version provided
92 @Path("/{version:[vV][3-5]}")
93 @Consumes(MediaType.APPLICATION_JSON)
94 @Produces(MediaType.APPLICATION_JSON)
95 @ApiOperation(value = "Create an E2E Service Instance on a version provided", response = Response.class)
96 public Response createE2EServiceInstance(String request,
97 @PathParam("version") String version) {
99 return processE2EserviceInstances(request, Action.createInstance, null,
104 * PUT Requests for E2E Service update Instance on a version provided
108 @Path("/{version:[vV][3-5]}/{serviceId}")
109 @Consumes(MediaType.APPLICATION_JSON)
110 @Produces(MediaType.APPLICATION_JSON)
111 @ApiOperation(value = "Update an E2E Service Instance on a version provided and serviceId", response = Response.class)
112 public Response updateE2EServiceInstance(String request,
113 @PathParam("version") String version,
114 @PathParam("serviceId") String serviceId) {
116 instanceIdMap.put("serviceId", serviceId);
118 return updateE2EserviceInstances(request, Action.updateInstance, instanceIdMap,
123 * DELETE Requests for E2E Service delete Instance on a specified version
128 @Path("/{version:[vV][3-5]}/{serviceId}")
129 @Consumes(MediaType.APPLICATION_JSON)
130 @Produces(MediaType.APPLICATION_JSON)
131 @ApiOperation(value = "Delete E2E Service Instance on a specified version and serviceId", response = Response.class)
132 public Response deleteE2EServiceInstance(String request,
133 @PathParam("version") String version,
134 @PathParam("serviceId") String serviceId) {
136 instanceIdMap.put("serviceId", serviceId);
138 return deleteE2EserviceInstances(request, Action.deleteInstance,
139 instanceIdMap, version);
143 @Path("/{version:[vV][3-5]}/{serviceId}/operations/{operationId}")
144 @ApiOperation(value = "Find e2eServiceInstances Requests for a given serviceId and operationId", response = Response.class)
145 @Produces(MediaType.APPLICATION_JSON)
146 public Response getE2EServiceInstances(
147 @PathParam("serviceId") String serviceId,
148 @PathParam("version") String version,
149 @PathParam("operationId") String operationId) {
150 return getE2EServiceInstances(serviceId, operationId);
154 * Scale Requests for E2E Service scale Instance on a specified version
158 @Path("/{version:[vV][3-5]}/{serviceId}/scale")
159 @Consumes(MediaType.APPLICATION_JSON)
160 @Produces(MediaType.APPLICATION_JSON)
161 @ApiOperation(value="Scale E2E Service Instance on a specified version",response=Response.class)
162 public Response scaleE2EServiceInstance(String request,
163 @PathParam("version") String version,
164 @PathParam("serviceId") String serviceId) {
166 msoLogger.debug("------------------scale begin------------------");
167 instanceIdMap.put("serviceId", serviceId);
168 return scaleE2EserviceInstances(request, Action.scaleInstance, instanceIdMap, version);
171 * GET Requests for Comparing model of service instance with target version
175 @Path("/{version:[vV][3-5]}/{serviceId}/modeldifferences")
176 @Consumes(MediaType.APPLICATION_JSON)
177 @Produces(MediaType.APPLICATION_JSON)
178 @ApiOperation(value = "Find added and deleted resources of target model for the e2eserviceInstance on a given serviceId ", response = Response.class)
179 public Response compareModelwithTargetVersion(String request,
180 @PathParam("serviceId") String serviceId,
181 @PathParam("version") String version) {
183 instanceIdMap.put("serviceId", serviceId);
185 return compareModelwithTargetVersion(request, Action.compareModel, instanceIdMap, version);
188 private Response compareModelwithTargetVersion(String requestJSON, Action action,
189 HashMap<String, String> instanceIdMap, String version) {
191 String requestId = UUIDChecker.generateUUID(msoLogger);
192 long startTime = System.currentTimeMillis();
193 msoLogger.debug("requestId is: " + requestId);
195 CompareModelsRequest e2eCompareModelReq = null;
197 MsoRequest msoRequest = new MsoRequest(requestId);
199 ObjectMapper mapper = new ObjectMapper();
201 e2eCompareModelReq = mapper.readValue(requestJSON, CompareModelsRequest.class);
203 } catch (Exception e) {
205 msoLogger.debug("Mapping of request to JSON object failed : ", e);
206 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST,
207 MsoException.ServiceException, "Mapping of request to JSON object failed. " + e.getMessage(),
208 ErrorNumbers.SVC_BAD_PARAMETER, null);
209 msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
210 MsoLogger.ErrorCode.SchemaError, requestJSON, e);
211 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError,
212 "Mapping of request to JSON object failed");
213 msoLogger.debug(END_OF_THE_TRANSACTION + response.getEntity().toString());
218 return runCompareModelBPMWorkflow(e2eCompareModelReq, msoRequest, requestJSON, requestId, startTime, action);
222 private Response runCompareModelBPMWorkflow(CompareModelsRequest e2eCompareModelReq, MsoRequest msoRequest,
223 String requestJSON, String requestId, long startTime, Action action) {
225 // Define RecipeLookupResult info here instead of query DB for efficiency
226 String workflowUrl = "/mso/async/services/CompareModelofE2EServiceInstance";
228 RequestClient requestClient = null;
229 HttpResponse response = null;
231 long subStartTime = System.currentTimeMillis();
234 requestClient = RequestClientFactory.getRequestClient(workflowUrl, MsoPropertiesUtils.loadMsoProperties());
236 JSONObject jjo = new JSONObject(requestJSON);
238 // Capture audit event
239 msoLogger.debug("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl());
240 RequestClientParamater requestClientParamater = new RequestClientParamater.Builder().setRequestId(requestId).
241 setBaseVfModule(false).setRecipeTimeout(180).setRequestAction(action.name()).
242 setServiceInstanceId(instanceIdMap.get("serviceId")).setServiceType(e2eCompareModelReq.getServiceType()).
243 setRequestDetails(jjo.toString()).build();
245 response = requestClient.post(requestClientParamater);
247 msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
248 "Successfully received response from BPMN engine", "BPMN", workflowUrl, null);
249 } catch (Exception e) {
250 msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.ERROR,
251 MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine", "BPMN",
253 Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
254 MsoException.ServiceException, "Failed calling bpmn " + e.getMessage(),
255 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
256 alarmLogger.sendAlarm("MsoConfigurationError", MsoAlarmLogger.CRITICAL,
257 Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_BPEL));
258 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
259 MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine",e);
260 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError,
261 "Exception while communicate with BPMN engine");
262 msoLogger.debug(END_OF_THE_TRANSACTION + resp.getEntity().toString());
266 if (response == null) {
267 Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
268 MsoException.ServiceException, "bpelResponse is null", ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
269 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
270 MsoLogger.ErrorCode.BusinessProcesssError, "Null response from BPEL");
271 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError,
272 "Null response from BPMN");
273 msoLogger.debug(END_OF_THE_TRANSACTION + resp.getEntity().toString());
277 ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
278 int bpelStatus = respHandler.getStatus();
280 return beplStatusUpdate(requestId, startTime, msoRequest, requestClient, respHandler, bpelStatus, action,
284 private Response getE2EServiceInstances(String serviceId, String operationId) {
285 RequestsDatabase requestsDB = RequestsDatabase.getInstance();
287 GetE2EServiceInstanceResponse e2eServiceResponse = new GetE2EServiceInstanceResponse();
289 MsoRequest msoRequest = new MsoRequest(serviceId);
291 long startTime = System.currentTimeMillis();
293 OperationStatus operationStatus = null;
296 operationStatus = requestsDB.getOperationStatus(serviceId,
299 } catch (Exception e) {
301 .error(MessageEnum.APIH_DB_ACCESS_EXC,
302 MSO_PROP_APIHANDLER_INFRA,
305 MsoLogger.ErrorCode.AvailabilityError,
306 "Exception while communciate with Request DB - Infra Request Lookup",
309 .setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
310 Response response = msoRequest.buildServiceErrorResponse(
311 HttpStatus.SC_NOT_FOUND, MsoException.ServiceException,
313 ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB, null);
314 alarmLogger.sendAlarm("MsoDatabaseAccessError",
315 MsoAlarmLogger.CRITICAL, Messages.errors
316 .get(ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB));
317 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
318 MsoLogger.ResponseCode.DBAccessError,
319 "Exception while communciate with Request DB");
320 msoLogger.debug(END_OF_THE_TRANSACTION
321 + (String) response.getEntity());
326 if (operationStatus == null) {
327 Response resp = msoRequest.buildServiceErrorResponse(
328 HttpStatus.SC_NO_CONTENT, MsoException.ServiceException,
329 "E2E serviceId " + serviceId + " is not found in DB",
330 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, null);
331 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,
332 MSO_PROP_APIHANDLER_INFRA, "", "",
333 MsoLogger.ErrorCode.BusinessProcesssError,
334 "Null response from RequestDB when searching by serviceId");
335 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
336 MsoLogger.ResponseCode.DataNotFound,
337 "Null response from RequestDB when searching by serviceId");
338 msoLogger.debug(END_OF_THE_TRANSACTION
339 + (String) resp.getEntity());
344 e2eServiceResponse.setOperationStatus(operationStatus);
346 return Response.status(200).entity(e2eServiceResponse).build();
349 private Response deleteE2EserviceInstances(String requestJSON,
350 Action action, HashMap<String, String> instanceIdMap, String version) {
351 // TODO should be a new one or the same service instance Id
352 String requestId = UUIDChecker.generateUUID(msoLogger);
353 long startTime = System.currentTimeMillis();
354 msoLogger.debug("requestId is: " + requestId);
355 E2EServiceInstanceDeleteRequest e2eDelReq = null;
357 MsoRequest msoRequest = new MsoRequest(requestId);
359 ObjectMapper mapper = new ObjectMapper();
361 e2eDelReq = mapper.readValue(requestJSON,
362 E2EServiceInstanceDeleteRequest.class);
364 } catch (Exception e) {
366 msoLogger.debug("Mapping of request to JSON object failed : ", e);
367 Response response = msoRequest.buildServiceErrorResponse(
368 HttpStatus.SC_BAD_REQUEST,
369 MsoException.ServiceException,
370 "Mapping of request to JSON object failed. "
371 + e.getMessage(), ErrorNumbers.SVC_BAD_PARAMETER,
373 msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR,
374 MSO_PROP_APIHANDLER_INFRA, "", "",
375 MsoLogger.ErrorCode.SchemaError, requestJSON, e);
376 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
377 MsoLogger.ResponseCode.SchemaError,
378 "Mapping of request to JSON object failed");
379 msoLogger.debug(END_OF_THE_TRANSACTION
380 + (String) response.getEntity());
384 CatalogDatabase db = null;
385 RecipeLookupResult recipeLookupResult = null;
387 db = CatalogDatabase.getInstance();
388 //TODO Get the service template model version uuid from AAI.
389 recipeLookupResult = getServiceInstanceOrchestrationURI(db, null, action);
390 } catch (Exception e) {
391 msoLogger.error(MessageEnum.APIH_DB_ACCESS_EXC,
392 MSO_PROP_APIHANDLER_INFRA, "", "",
393 MsoLogger.ErrorCode.AvailabilityError,
394 "Exception while communciate with Catalog DB", e);
396 .setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
397 Response response = msoRequest.buildServiceErrorResponse(
398 HttpStatus.SC_NOT_FOUND, MsoException.ServiceException,
399 "No communication to catalog DB " + e.getMessage(),
400 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
401 alarmLogger.sendAlarm("MsoDatabaseAccessError",
402 MsoAlarmLogger.CRITICAL, Messages.errors
403 .get(ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB));
404 msoRequest.createRequestRecord(Status.FAILED, action);
405 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
406 MsoLogger.ResponseCode.DBAccessError,
407 "Exception while communciate with DB");
408 msoLogger.debug(END_OF_THE_TRANSACTION
409 + (String) response.getEntity());
414 if (recipeLookupResult == null) {
415 msoLogger.error(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND,
416 MSO_PROP_APIHANDLER_INFRA, "", "",
417 MsoLogger.ErrorCode.DataError, "No recipe found in DB");
419 .setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
420 Response response = msoRequest.buildServiceErrorResponse(
421 HttpStatus.SC_NOT_FOUND, MsoException.ServiceException,
422 "Recipe does not exist in catalog DB",
423 ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, null);
424 msoRequest.createRequestRecord(Status.FAILED, action);
425 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
426 MsoLogger.ResponseCode.DataNotFound,
427 "No recipe found in DB");
428 msoLogger.debug(END_OF_THE_TRANSACTION
429 + (String) response.getEntity());
433 RequestClient requestClient = null;
434 HttpResponse response = null;
436 long subStartTime = System.currentTimeMillis();
438 requestClient = RequestClientFactory.getRequestClient(
439 recipeLookupResult.getOrchestrationURI(),
440 MsoPropertiesUtils.loadMsoProperties());
442 JSONObject jjo = new JSONObject(requestJSON);
443 jjo.put("operationId", UUIDChecker.generateUUID(msoLogger));
444 // Capture audit event
446 .debug("MSO API Handler Posting call to BPEL engine for url: "
447 + requestClient.getUrl());
449 RequestClientParamater requestClientParamater = new RequestClientParamater.Builder().setRequestId(requestId).
450 setBaseVfModule(false).setRecipeTimeout(recipeLookupResult.getRecipeTimeout()).
451 setRequestAction(action.name()).setServiceInstanceId(instanceIdMap.get("serviceId")).
452 setServiceType(e2eDelReq.getServiceType()).setRequestDetails(jjo.toString()).
453 setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd()).build();
454 response = requestClient.post(requestClientParamater);
456 msoLogger.recordMetricEvent(subStartTime,
457 MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
458 "Successfully received response from BPMN engine", "BPMN",
459 recipeLookupResult.getOrchestrationURI(), null);
460 } catch (Exception e) {
461 msoLogger.recordMetricEvent(subStartTime,
462 MsoLogger.StatusCode.ERROR,
463 MsoLogger.ResponseCode.CommunicationError,
464 "Exception while communicate with BPMN engine", "BPMN",
465 recipeLookupResult.getOrchestrationURI(), null);
466 Response resp = msoRequest.buildServiceErrorResponse(
467 HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,
468 "Failed calling bpmn " + e.getMessage(),
469 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
470 alarmLogger.sendAlarm("MsoConfigurationError",
471 MsoAlarmLogger.CRITICAL,
472 Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_BPEL));
473 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,
474 MSO_PROP_APIHANDLER_INFRA, "", "",
475 MsoLogger.ErrorCode.AvailabilityError,
476 "Exception while communicate with BPMN engine");
477 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
478 MsoLogger.ResponseCode.CommunicationError,
479 "Exception while communicate with BPMN engine");
480 msoLogger.debug("End of the transaction, the final response is: "
481 + (String) resp.getEntity());
485 if (response == null) {
486 Response resp = msoRequest.buildServiceErrorResponse(
487 HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,
488 "bpelResponse is null",
489 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
490 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,
491 MSO_PROP_APIHANDLER_INFRA, "", "",
492 MsoLogger.ErrorCode.BusinessProcesssError,
493 "Null response from BPEL");
494 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
495 MsoLogger.ResponseCode.InternalError,
496 "Null response from BPMN");
497 msoLogger.debug(END_OF_THE_TRANSACTION + (String) resp.getEntity());
501 ResponseHandler respHandler = new ResponseHandler(response,
502 requestClient.getType());
503 int bpelStatus = respHandler.getStatus();
505 return beplStatusUpdate(requestId, startTime, msoRequest,
506 requestClient, respHandler, bpelStatus, action, instanceIdMap);
509 private Response updateE2EserviceInstances(String requestJSON, Action action,
510 HashMap<String, String> instanceIdMap, String version) {
512 String requestId = UUIDChecker.generateUUID(msoLogger);
513 long startTime = System.currentTimeMillis();
514 msoLogger.debug("requestId is: " + requestId);
515 E2EServiceInstanceRequest e2eSir = null;
516 String serviceId = instanceIdMap.get("serviceId");
518 MsoRequest msoRequest = new MsoRequest(requestId);
519 ObjectMapper mapper = new ObjectMapper();
521 e2eSir = mapper.readValue(requestJSON, E2EServiceInstanceRequest.class);
523 } catch (Exception e) {
525 msoLogger.debug("Mapping of request to JSON object failed : ", e);
526 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST,
527 MsoException.ServiceException, "Mapping of request to JSON object failed. " + e.getMessage(),
528 ErrorNumbers.SVC_BAD_PARAMETER, null);
529 msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
530 MsoLogger.ErrorCode.SchemaError, requestJSON, e);
531 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError,
532 "Mapping of request to JSON object failed");
533 msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());
537 mapReqJsonToSvcInstReq(e2eSir, requestJSON);
538 sir.getRequestDetails().getRequestParameters().setaLaCarte(true);
540 msoRequest.parse(sir, instanceIdMap, action, version, requestJSON);
541 } catch (Exception e) {
542 msoLogger.debug("Validation failed: ", e);
543 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST,
544 MsoException.ServiceException, "Error parsing request. " + e.getMessage(),
545 ErrorNumbers.SVC_BAD_PARAMETER, null);
546 if (msoRequest.getRequestId() != null) {
547 msoLogger.debug("Logging failed message to the database");
549 msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
550 MsoLogger.ErrorCode.SchemaError, requestJSON, e);
551 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError,
552 "Validation of the input request failed");
553 msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());
557 CatalogDatabase db = null;
558 RecipeLookupResult recipeLookupResult = null;
560 db = CatalogDatabase.getInstance();
561 recipeLookupResult = getServiceInstanceOrchestrationURI(db, e2eSir.getService().getServiceUuid(), action);
562 } catch (Exception e) {
563 msoLogger.error(MessageEnum.APIH_DB_ACCESS_EXC, MSO_PROP_APIHANDLER_INFRA, "", "",
564 MsoLogger.ErrorCode.AvailabilityError, "Exception while communciate with Catalog DB", e);
565 msoRequest.setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
566 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_NOT_FOUND,
567 MsoException.ServiceException, "No communication to catalog DB " + e.getMessage(),
568 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
569 alarmLogger.sendAlarm("MsoDatabaseAccessError", MsoAlarmLogger.CRITICAL,
570 Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB));
572 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError,
573 "Exception while communciate with DB");
574 msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());
581 if (recipeLookupResult == null) {
582 msoLogger.error(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MSO_PROP_APIHANDLER_INFRA, "", "",
583 MsoLogger.ErrorCode.DataError, "No recipe found in DB");
584 msoRequest.setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
585 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_NOT_FOUND,
586 MsoException.ServiceException, "Recipe does not exist in catalog DB",
587 ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, null);
589 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound,
590 "No recipe found in DB");
591 msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());
596 String serviceInstanceType = e2eSir.getService().getServiceType();
598 RequestClient requestClient = null;
599 HttpResponse response = null;
601 long subStartTime = System.currentTimeMillis();
603 requestClient = RequestClientFactory.getRequestClient(recipeLookupResult.getOrchestrationURI(),
604 MsoPropertiesUtils.loadMsoProperties());
606 // Capture audit event
607 msoLogger.debug("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl());
608 RequestClientParamater requestClientParamater = new RequestClientParamater.Builder().setRequestId(requestId).
609 setBaseVfModule(false).setRecipeTimeout(recipeLookupResult.getRecipeTimeout()).setRequestAction(action.name()).
610 setServiceInstanceId(serviceId).setServiceType(serviceInstanceType).
611 setRequestDetails(mapReqJsonToSvcInstReq(e2eSir, requestJSON)).
612 setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd()).build();
614 response = requestClient.post(requestClientParamater);
616 msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
617 "Successfully received response from BPMN engine", "BPMN", recipeLookupResult.getOrchestrationURI(),
619 } catch (Exception e) {
620 msoLogger.debug("Exception while communicate with BPMN engine", e);
621 msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.ERROR,
622 MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine", "BPMN",
623 recipeLookupResult.getOrchestrationURI(), null);
624 Response getBPMNResp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
625 MsoException.ServiceException, "Failed calling bpmn " + e.getMessage(),
626 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
627 alarmLogger.sendAlarm("MsoConfigurationError", MsoAlarmLogger.CRITICAL,
628 Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_BPEL));
629 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
630 MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine");
631 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError,
632 "Exception while communicate with BPMN engine");
633 msoLogger.debug(END_OF_THE_TRANSACTION + (String) getBPMNResp.getEntity());
638 if (response == null) {
639 Response getBPMNResp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
640 MsoException.ServiceException, "bpelResponse is null", ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
641 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
642 MsoLogger.ErrorCode.BusinessProcesssError, "Null response from BPEL");
643 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError,
644 "Null response from BPMN");
645 msoLogger.debug(END_OF_THE_TRANSACTION + (String) getBPMNResp.getEntity());
650 ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
651 int bpelStatus = respHandler.getStatus();
653 return beplStatusUpdate(serviceId, startTime, msoRequest, requestClient, respHandler, bpelStatus, action, instanceIdMap);
656 private Response processE2EserviceInstances(String requestJSON, Action action,
657 HashMap<String, String> instanceIdMap, String version) {
659 String requestId = UUIDChecker.generateUUID(msoLogger);
660 long startTime = System.currentTimeMillis();
661 msoLogger.debug("requestId is: " + requestId);
662 E2EServiceInstanceRequest e2eSir = null;
664 MsoRequest msoRequest = new MsoRequest(requestId);
665 ObjectMapper mapper = new ObjectMapper();
667 e2eSir = mapper.readValue(requestJSON, E2EServiceInstanceRequest.class);
669 } catch (Exception e) {
671 msoLogger.debug("Mapping of request to JSON object failed : ", e);
672 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST,
673 MsoException.ServiceException, "Mapping of request to JSON object failed. " + e.getMessage(),
674 ErrorNumbers.SVC_BAD_PARAMETER, null);
675 msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
676 MsoLogger.ErrorCode.SchemaError, requestJSON, e);
677 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError,
678 "Mapping of request to JSON object failed");
679 msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());
683 mapReqJsonToSvcInstReq(e2eSir, requestJSON);
684 sir.getRequestDetails().getRequestParameters().setaLaCarte(true);
686 msoRequest.parse(sir, instanceIdMap, action, version, requestJSON);
687 } catch (Exception e) {
688 msoLogger.debug("Validation failed: ", e);
689 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST,
690 MsoException.ServiceException, "Error parsing request. " + e.getMessage(),
691 ErrorNumbers.SVC_BAD_PARAMETER, null);
692 if (msoRequest.getRequestId() != null) {
693 msoLogger.debug("Logging failed message to the database");
695 msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
696 MsoLogger.ErrorCode.SchemaError, requestJSON, e);
697 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError,
698 "Validation of the input request failed");
699 msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());
703 CatalogDatabase db = null;
704 RecipeLookupResult recipeLookupResult = null;
706 db = CatalogDatabase.getInstance();
707 recipeLookupResult = getServiceInstanceOrchestrationURI(db, e2eSir.getService().getServiceUuid(), action);
708 } catch (Exception e) {
709 msoLogger.error(MessageEnum.APIH_DB_ACCESS_EXC, MSO_PROP_APIHANDLER_INFRA, "", "",
710 MsoLogger.ErrorCode.AvailabilityError, "Exception while communciate with Catalog DB", e);
711 msoRequest.setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
712 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_NOT_FOUND,
713 MsoException.ServiceException, "No communication to catalog DB " + e.getMessage(),
714 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
715 alarmLogger.sendAlarm("MsoDatabaseAccessError", MsoAlarmLogger.CRITICAL,
716 Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB));
718 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError,
719 "Exception while communciate with DB");
720 msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());
726 if (recipeLookupResult == null) {
727 msoLogger.error(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MSO_PROP_APIHANDLER_INFRA, "", "",
728 MsoLogger.ErrorCode.DataError, "No recipe found in DB");
729 msoRequest.setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
730 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_NOT_FOUND,
731 MsoException.ServiceException, "Recipe does not exist in catalog DB",
732 ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, null);
734 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound,
735 "No recipe found in DB");
736 msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());
740 RequestClient requestClient = null;
741 HttpResponse response = null;
743 long subStartTime = System.currentTimeMillis();
745 requestClient = RequestClientFactory.getRequestClient(recipeLookupResult.getOrchestrationURI(),
746 MsoPropertiesUtils.loadMsoProperties());
748 // Capture audit event
749 msoLogger.debug("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl());
750 RequestClientParamater requestClientParamater = new RequestClientParamater.Builder().setRequestId(requestId).
751 setBaseVfModule(false).setRecipeTimeout(recipeLookupResult.getRecipeTimeout()).setRequestAction(action.name()).
752 setServiceInstanceId("").setServiceType(e2eSir.getService().getServiceType()).
753 setRequestDetails(mapReqJsonToSvcInstReq(e2eSir, requestJSON)).
754 setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd()).build();
756 response = requestClient.post(requestClientParamater);
758 msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
759 "Successfully received response from BPMN engine", "BPMN", recipeLookupResult.getOrchestrationURI(),
761 } catch (Exception e) {
762 msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.ERROR,
763 MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine", "BPMN",
764 recipeLookupResult.getOrchestrationURI(), null);
765 Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
766 MsoException.ServiceException, "Failed calling bpmn " + e.getMessage(),
767 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
768 alarmLogger.sendAlarm("MsoConfigurationError", MsoAlarmLogger.CRITICAL,
769 Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_BPEL));
770 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
771 MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine");
772 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError,
773 "Exception while communicate with BPMN engine");
774 msoLogger.debug(END_OF_THE_TRANSACTION + (String) resp.getEntity());
778 if (response == null) {
779 Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
780 MsoException.ServiceException, "bpelResponse is null", ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
781 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
782 MsoLogger.ErrorCode.BusinessProcesssError, "Null response from BPEL");
783 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError,
784 "Null response from BPMN");
785 msoLogger.debug(END_OF_THE_TRANSACTION + (String) resp.getEntity());
789 ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
790 int bpelStatus = respHandler.getStatus();
792 return beplStatusUpdate(requestId, startTime, msoRequest, requestClient, respHandler, bpelStatus, action, instanceIdMap);
795 private Response scaleE2EserviceInstances(String requestJSON,
796 Action action, HashMap<String, String> instanceIdMap, String version) {
798 String requestId = UUIDChecker.generateUUID(msoLogger);
799 long startTime = System.currentTimeMillis();
800 msoLogger.debug("requestId is: " + requestId);
801 E2EServiceInstanceScaleRequest e2eScaleReq = null;
803 MsoRequest msoRequest = new MsoRequest(requestId);
805 ObjectMapper mapper = new ObjectMapper();
807 e2eScaleReq = mapper.readValue(requestJSON,
808 E2EServiceInstanceScaleRequest.class);
810 } catch (Exception e) {
812 msoLogger.debug("Mapping of request to JSON object failed : ", e);
813 Response response = msoRequest.buildServiceErrorResponse(
814 HttpStatus.SC_BAD_REQUEST,
815 MsoException.ServiceException,
816 "Mapping of request to JSON object failed. "
817 + e.getMessage(), ErrorNumbers.SVC_BAD_PARAMETER,
819 msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR,
820 MSO_PROP_APIHANDLER_INFRA, "", "",
821 MsoLogger.ErrorCode.SchemaError, requestJSON, e);
822 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
823 MsoLogger.ResponseCode.SchemaError,
824 "Mapping of request to JSON object failed");
825 msoLogger.debug(END_OF_THE_TRANSACTION
826 + (String) response.getEntity());
830 CatalogDatabase db = null;
831 RecipeLookupResult recipeLookupResult = null;
833 db = CatalogDatabase.getInstance();
834 //TODO Get the service template model version uuid from AAI.
835 recipeLookupResult = getServiceInstanceOrchestrationURI(db, null, action);
836 } catch (Exception e) {
837 msoLogger.error(MessageEnum.APIH_DB_ACCESS_EXC,
838 MSO_PROP_APIHANDLER_INFRA, "", "",
839 MsoLogger.ErrorCode.AvailabilityError,
840 "Exception while communciate with Catalog DB", e);
842 .setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
843 Response response = msoRequest.buildServiceErrorResponse(
844 HttpStatus.SC_NOT_FOUND, MsoException.ServiceException,
845 "No communication to catalog DB " + e.getMessage(),
846 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
847 alarmLogger.sendAlarm("MsoDatabaseAccessError",
848 MsoAlarmLogger.CRITICAL, Messages.errors
849 .get(ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB));
850 msoRequest.createRequestRecord(Status.FAILED, action);
851 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
852 MsoLogger.ResponseCode.DBAccessError,
853 "Exception while communciate with DB");
854 msoLogger.debug(END_OF_THE_TRANSACTION
855 + (String) response.getEntity());
860 if (recipeLookupResult == null) {
861 msoLogger.error(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND,
862 MSO_PROP_APIHANDLER_INFRA, "", "",
863 MsoLogger.ErrorCode.DataError, "No recipe found in DB");
865 .setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
866 Response response = msoRequest.buildServiceErrorResponse(
867 HttpStatus.SC_NOT_FOUND, MsoException.ServiceException,
868 "Recipe does not exist in catalog DB",
869 ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, null);
870 msoRequest.createRequestRecord(Status.FAILED, action);
871 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
872 MsoLogger.ResponseCode.DataNotFound,
873 "No recipe found in DB");
874 msoLogger.debug(END_OF_THE_TRANSACTION
875 + (String) response.getEntity());
879 RequestClient requestClient = null;
880 HttpResponse response = null;
882 long subStartTime = System.currentTimeMillis();
884 requestClient = RequestClientFactory.getRequestClient(
885 recipeLookupResult.getOrchestrationURI(),
886 MsoPropertiesUtils.loadMsoProperties());
888 JSONObject jjo = new JSONObject(requestJSON);
889 jjo.put("operationId", UUIDChecker.generateUUID(msoLogger));
891 // Capture audit event
893 .debug("MSO API Handler Posting call to BPEL engine for url: "
894 + requestClient.getUrl());
895 RequestClientParamater requestClientParamater = new RequestClientParamater.Builder().setRequestId(requestId).
896 setBaseVfModule(false).setRecipeTimeout(recipeLookupResult.getRecipeTimeout()).setRequestAction(action.name()).
897 setServiceInstanceId(instanceIdMap.get("serviceId")).
898 setServiceType(e2eScaleReq.getService().getServiceType()).
899 setRequestDetails(jjo.toString()).
900 setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd()).build();
902 response = requestClient.post(requestClientParamater);
904 msoLogger.recordMetricEvent(subStartTime,
905 MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
906 "Successfully received response from BPMN engine", "BPMN",
907 recipeLookupResult.getOrchestrationURI(), null);
908 } catch (Exception e) {
909 msoLogger.recordMetricEvent(subStartTime,
910 MsoLogger.StatusCode.ERROR,
911 MsoLogger.ResponseCode.CommunicationError,
912 "Exception while communicate with BPMN engine", "BPMN",
913 recipeLookupResult.getOrchestrationURI(), null);
914 Response resp = msoRequest.buildServiceErrorResponse(
915 HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,
916 "Failed calling bpmn " + e.getMessage(),
917 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
918 alarmLogger.sendAlarm("MsoConfigurationError",
919 MsoAlarmLogger.CRITICAL,
920 Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_BPEL));
921 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,
922 MSO_PROP_APIHANDLER_INFRA, "", "",
923 MsoLogger.ErrorCode.AvailabilityError,
924 "Exception while communicate with BPMN engine",e);
925 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
926 MsoLogger.ResponseCode.CommunicationError,
927 "Exception while communicate with BPMN engine");
928 msoLogger.debug(END_OF_THE_TRANSACTION
929 + (String) resp.getEntity());
933 if (response == null) {
934 Response resp = msoRequest.buildServiceErrorResponse(
935 HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,
936 "bpelResponse is null",
937 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
938 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,
939 MSO_PROP_APIHANDLER_INFRA, "", "",
940 MsoLogger.ErrorCode.BusinessProcesssError,
941 "Null response from BPEL");
942 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
943 MsoLogger.ResponseCode.InternalError,
944 "Null response from BPMN");
945 msoLogger.debug(END_OF_THE_TRANSACTION + (String) resp.getEntity());
949 ResponseHandler respHandler = new ResponseHandler(response,
950 requestClient.getType());
951 int bpelStatus = respHandler.getStatus();
953 return beplStatusUpdate(requestId, startTime, msoRequest,
954 requestClient, respHandler, bpelStatus, action, instanceIdMap);
957 private void closeCatalogDB(CatalogDatabase db) {
963 private Response beplStatusUpdate(String serviceId, long startTime,
964 MsoRequest msoRequest, RequestClient requestClient,
965 ResponseHandler respHandler, int bpelStatus, Action action,
966 HashMap<String, String> instanceIdMap) {
967 // BPMN accepted the request, the request is in progress
968 if (bpelStatus == HttpStatus.SC_ACCEPTED) {
969 String camundaJSONResponseBody = respHandler.getContent();
970 msoLogger.debug("Received from Camunda: " + camundaJSONResponseBody);
971 msoLogger.recordAuditEvent(startTime,
972 MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
973 "BPMN accepted the request, the request is in progress");
974 msoLogger.debug(END_OF_THE_TRANSACTION + camundaJSONResponseBody);
975 return Response.status(HttpStatus.SC_ACCEPTED)
976 .entity(camundaJSONResponseBody).build();
978 List<String> variables = new ArrayList<>();
979 variables.add(bpelStatus + "");
980 String camundaJSONResponseBody = respHandler.getContent();
981 if (camundaJSONResponseBody != null
982 && !camundaJSONResponseBody.isEmpty()) {
983 Response resp = msoRequest.buildServiceErrorResponse(
984 bpelStatus, MsoException.ServiceException,
985 "Request Failed due to BPEL error with HTTP Status= %1 "
986 + '\n' + camundaJSONResponseBody,
987 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, variables);
988 msoLogger.error(MessageEnum.APIH_BPEL_RESPONSE_ERROR,
989 requestClient.getUrl(), "", "",
990 MsoLogger.ErrorCode.BusinessProcesssError,
991 "Response from BPEL engine is failed with HTTP Status="
993 msoLogger.recordAuditEvent(startTime,
994 MsoLogger.StatusCode.ERROR,
995 MsoLogger.ResponseCode.InternalError,
996 "Response from BPMN engine is failed");
997 msoLogger.debug(END_OF_THE_TRANSACTION
998 + (String) resp.getEntity());
1001 Response resp = msoRequest
1002 .buildServiceErrorResponse(
1004 MsoException.ServiceException,
1005 "Request Failed due to BPEL error with HTTP Status= %1",
1006 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR,
1008 msoLogger.error(MessageEnum.APIH_BPEL_RESPONSE_ERROR,
1009 requestClient.getUrl(), "", "",
1010 MsoLogger.ErrorCode.BusinessProcesssError,
1011 "Response from BPEL engine is empty");
1012 msoLogger.recordAuditEvent(startTime,
1013 MsoLogger.StatusCode.ERROR,
1014 MsoLogger.ResponseCode.InternalError,
1015 "Response from BPEL engine is empty");
1016 msoLogger.debug(END_OF_THE_TRANSACTION
1017 + (String) resp.getEntity());
1024 * Getting recipes from catalogDb
1026 * @param db the catalog db
1027 * @param serviceModelUUID the service model version uuid
1028 * @param action the action for the service
1029 * @return the service recipe result
1031 private RecipeLookupResult getServiceInstanceOrchestrationURI(
1032 CatalogDatabase db, String serviceModelUUID, Action action) {
1034 RecipeLookupResult recipeLookupResult = getServiceURI(db, serviceModelUUID, action);
1036 if (recipeLookupResult != null) {
1037 msoLogger.debug("Orchestration URI is: "
1038 + recipeLookupResult.getOrchestrationURI()
1039 + ", recipe Timeout is: "
1040 + Integer.toString(recipeLookupResult.getRecipeTimeout()));
1042 msoLogger.debug("No matching recipe record found");
1044 return recipeLookupResult;
1048 * Getting recipes from catalogDb
1049 * If Service recipe is not set, use default recipe, if set , use special recipe.
1050 * @param db the catalog db
1051 * @param serviceModelUUID the service version uuid
1052 * @param action the action of the service.
1053 * @return the service recipe result.
1055 private RecipeLookupResult getServiceURI(CatalogDatabase db, String serviceModelUUID, Action action) {
1057 String defaultServiceModelName = "UUI_DEFAULT";
1059 Service defaultServiceRecord = db
1060 .getServiceByModelName(defaultServiceModelName);
1061 ServiceRecipe defaultRecipe = db.getServiceRecipeByModelUUID(
1062 defaultServiceRecord.getModelUUID(), action.name());
1063 //set recipe as default generic recipe
1064 ServiceRecipe recipe = defaultRecipe;
1065 //check the service special recipe
1066 if(null != serviceModelUUID && ! serviceModelUUID.isEmpty()){
1067 ServiceRecipe serviceSpecialRecipe = db.getServiceRecipeByModelUUID(
1068 serviceModelUUID, action.name());
1069 if(null != serviceSpecialRecipe){
1070 //set service special recipe.
1071 recipe = serviceSpecialRecipe;
1075 if (recipe == null) {
1078 return new RecipeLookupResult(recipe.getOrchestrationUri(),
1079 recipe.getRecipeTimeout(), recipe.getServiceParamXSD());
1084 * Converting E2EServiceInstanceRequest to ServiceInstanceRequest and
1085 * passing it to camunda engine.
1090 private String mapReqJsonToSvcInstReq(E2EServiceInstanceRequest e2eSir,
1091 String requestJSON) {
1093 sir = new ServiceInstancesRequest();
1095 String returnString = null;
1096 RequestDetails requestDetails = new RequestDetails();
1097 ModelInfo modelInfo = new ModelInfo();
1100 modelInfo.setModelInvariantId(e2eSir.getService().getServiceInvariantUuid());
1102 // modelNameVersionId
1103 modelInfo.setModelNameVersionId(e2eSir.getService().getServiceUuid());
1105 // String modelInfoValue =
1106 // e2eSir.getService().getParameters().getNodeTemplateName();
1107 // String[] arrayOfInfo = modelInfoValue.split(":");
1108 // String modelName = arrayOfInfo[0];
1109 // String modelVersion = arrayOfInfo[1];
1111 // TODO: To ensure, if we dont get the values from the UUI
1112 String modelName = "voLTE";
1113 String modelVersion = "1.0";
1115 modelInfo.setModelName(modelName);
1118 modelInfo.setModelVersion(modelVersion);
1121 modelInfo.setModelType(ModelType.service);
1123 // setting modelInfo to requestDetails
1124 requestDetails.setModelInfo(modelInfo);
1126 SubscriberInfo subscriberInfo = new SubscriberInfo();
1128 // globalsubscriberId
1129 subscriberInfo.setGlobalSubscriberId(e2eSir.getService().getGlobalSubscriberId());
1131 // setting subscriberInfo to requestDetails
1132 requestDetails.setSubscriberInfo(subscriberInfo);
1134 RequestInfo requestInfo = new RequestInfo();
1137 requestInfo.setInstanceName(e2eSir.getService().getName());
1140 requestInfo.setSource("UUI");
1143 requestInfo.setSuppressRollback(true);
1145 // setting requestInfo to requestDetails
1146 requestDetails.setRequestInfo(requestInfo);
1148 RequestParameters requestParameters = new RequestParameters();
1150 // subscriptionServiceType
1151 requestParameters.setSubscriptionServiceType("MOG");
1154 //List<E2EUserParam> userParams;
1156 // e2eSir.getService().getParameters().getRequestParameters().getUserParams();
1157 List<Map<String, Object>> userParamList = new ArrayList<>();
1158 Map<String, Object> userParamMap = new HashMap<>();
1159 // complete json request updated in the camunda
1160 userParamMap.put("UUIRequest", requestJSON);
1161 userParamMap.put("ServiceInstanceName", e2eSir.getService().getName());
1163 // Map<String, String> userParamMap3 = null;
1164 // for (E2EUserParam userp : userParams) {
1165 // userParamMap.put(userp.getName(), userp.getValue());
1168 userParamList.add(userParamMap);
1169 requestParameters.setUserParams(userParamList);
1171 // setting requestParameters to requestDetails
1172 requestDetails.setRequestParameters(requestParameters);
1174 sir.setRequestDetails(requestDetails);
1176 // converting to string
1177 ObjectMapper mapper = new ObjectMapper();
1179 returnString = mapper.writeValueAsString(sir);
1180 } catch (IOException e) {
1182 .debug("Exception while converting ServiceInstancesRequest object to string",
1186 return returnString;