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, the final response is: " + response.getEntity().toString());
218 Response returnResp = runCompareModelBPMWorkflow(e2eCompareModelReq, msoRequest, requestJSON, requestId,
225 private Response runCompareModelBPMWorkflow(CompareModelsRequest e2eCompareModelReq, MsoRequest msoRequest,
226 String requestJSON, String requestId, long startTime, Action action) {
228 // Define RecipeLookupResult info here instead of query DB for efficiency
229 String workflowUrl = "/mso/async/services/CompareModelofE2EServiceInstance";
231 RequestClient requestClient = null;
232 HttpResponse response = null;
234 long subStartTime = System.currentTimeMillis();
237 requestClient = RequestClientFactory.getRequestClient(workflowUrl, MsoPropertiesUtils.loadMsoProperties());
239 JSONObject jjo = new JSONObject(requestJSON);
241 // Capture audit event
242 msoLogger.debug("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl());
243 RequestClientParamater requestClientParamater = new RequestClientParamater.Builder().setRequestId(requestId).
244 setBaseVfModule(false).setRecipeTimeout(180).setRequestAction(action.name()).
245 setServiceInstanceId(instanceIdMap.get("serviceId")).setServiceType(e2eCompareModelReq.getServiceType()).
246 setRequestDetails(jjo.toString()).build();
248 response = requestClient.post(requestClientParamater);
250 msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
251 "Successfully received response from BPMN engine", "BPMN", workflowUrl, null);
252 } catch (Exception e) {
253 msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.ERROR,
254 MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine", "BPMN",
256 Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
257 MsoException.ServiceException, "Failed calling bpmn " + e.getMessage(),
258 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
259 alarmLogger.sendAlarm("MsoConfigurationError", MsoAlarmLogger.CRITICAL,
260 Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_BPEL));
261 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
262 MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine",e);
263 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError,
264 "Exception while communicate with BPMN engine");
265 msoLogger.debug("End of the transaction, the final response is: " + resp.getEntity().toString());
269 if (response == null) {
270 Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
271 MsoException.ServiceException, "bpelResponse is null", ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
272 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
273 MsoLogger.ErrorCode.BusinessProcesssError, "Null response from BPEL");
274 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError,
275 "Null response from BPMN");
276 msoLogger.debug(END_OF_THE_TRANSACTION + resp.getEntity().toString());
280 ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
281 int bpelStatus = respHandler.getStatus();
282 // String responseBody = respHandler.getResponseBody();
283 // CompareModelsResult modelDiffResponse = new CompareModelsResult();
285 return beplStatusUpdate(requestId, startTime, msoRequest, requestClient, respHandler, bpelStatus, action,
289 private Response getE2EServiceInstances(String serviceId, String operationId) {
290 RequestsDatabase requestsDB = RequestsDatabase.getInstance();
292 GetE2EServiceInstanceResponse e2eServiceResponse = new GetE2EServiceInstanceResponse();
294 MsoRequest msoRequest = new MsoRequest(serviceId);
296 long startTime = System.currentTimeMillis();
298 OperationStatus operationStatus = null;
301 operationStatus = requestsDB.getOperationStatus(serviceId,
304 } catch (Exception e) {
306 .error(MessageEnum.APIH_DB_ACCESS_EXC,
307 MSO_PROP_APIHANDLER_INFRA,
310 MsoLogger.ErrorCode.AvailabilityError,
311 "Exception while communciate with Request DB - Infra Request Lookup",
314 .setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
315 Response response = msoRequest.buildServiceErrorResponse(
316 HttpStatus.SC_NOT_FOUND, MsoException.ServiceException,
318 ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB, null);
319 alarmLogger.sendAlarm("MsoDatabaseAccessError",
320 MsoAlarmLogger.CRITICAL, Messages.errors
321 .get(ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB));
322 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
323 MsoLogger.ResponseCode.DBAccessError,
324 "Exception while communciate with Request DB");
325 msoLogger.debug("End of the transaction, the final response is: "
326 + (String) response.getEntity());
331 if (operationStatus == null) {
332 Response resp = msoRequest.buildServiceErrorResponse(
333 HttpStatus.SC_NO_CONTENT, MsoException.ServiceException,
334 "E2E serviceId " + serviceId + " is not found in DB",
335 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, null);
336 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,
337 MSO_PROP_APIHANDLER_INFRA, "", "",
338 MsoLogger.ErrorCode.BusinessProcesssError,
339 "Null response from RequestDB when searching by serviceId");
340 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
341 MsoLogger.ResponseCode.DataNotFound,
342 "Null response from RequestDB when searching by serviceId");
343 msoLogger.debug("End of the transaction, the final response is: "
344 + (String) resp.getEntity());
349 e2eServiceResponse.setOperationStatus(operationStatus);
351 return Response.status(200).entity(e2eServiceResponse).build();
354 private Response deleteE2EserviceInstances(String requestJSON,
355 Action action, HashMap<String, String> instanceIdMap, String version) {
356 // TODO should be a new one or the same service instance Id
357 String requestId = UUIDChecker.generateUUID(msoLogger);
358 long startTime = System.currentTimeMillis();
359 msoLogger.debug("requestId is: " + requestId);
360 E2EServiceInstanceDeleteRequest e2eDelReq = null;
362 MsoRequest msoRequest = new MsoRequest(requestId);
364 ObjectMapper mapper = new ObjectMapper();
366 e2eDelReq = mapper.readValue(requestJSON,
367 E2EServiceInstanceDeleteRequest.class);
369 } catch (Exception e) {
371 msoLogger.debug("Mapping of request to JSON object failed : ", e);
372 Response response = msoRequest.buildServiceErrorResponse(
373 HttpStatus.SC_BAD_REQUEST,
374 MsoException.ServiceException,
375 "Mapping of request to JSON object failed. "
376 + e.getMessage(), ErrorNumbers.SVC_BAD_PARAMETER,
378 msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR,
379 MSO_PROP_APIHANDLER_INFRA, "", "",
380 MsoLogger.ErrorCode.SchemaError, requestJSON, e);
381 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
382 MsoLogger.ResponseCode.SchemaError,
383 "Mapping of request to JSON object failed");
384 msoLogger.debug("End of the transaction, the final response is: "
385 + (String) response.getEntity());
389 CatalogDatabase db = null;
390 RecipeLookupResult recipeLookupResult = null;
392 db = CatalogDatabase.getInstance();
393 //TODO Get the service template model version uuid from AAI.
394 recipeLookupResult = getServiceInstanceOrchestrationURI(db, null, action);
395 } catch (Exception e) {
396 msoLogger.error(MessageEnum.APIH_DB_ACCESS_EXC,
397 MSO_PROP_APIHANDLER_INFRA, "", "",
398 MsoLogger.ErrorCode.AvailabilityError,
399 "Exception while communciate with Catalog DB", e);
401 .setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
402 Response response = msoRequest.buildServiceErrorResponse(
403 HttpStatus.SC_NOT_FOUND, MsoException.ServiceException,
404 "No communication to catalog DB " + e.getMessage(),
405 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
406 alarmLogger.sendAlarm("MsoDatabaseAccessError",
407 MsoAlarmLogger.CRITICAL, Messages.errors
408 .get(ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB));
409 msoRequest.createRequestRecord(Status.FAILED, action);
410 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
411 MsoLogger.ResponseCode.DBAccessError,
412 "Exception while communciate with DB");
413 msoLogger.debug(END_OF_THE_TRANSACTION
414 + (String) response.getEntity());
419 if (recipeLookupResult == null) {
420 msoLogger.error(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND,
421 MSO_PROP_APIHANDLER_INFRA, "", "",
422 MsoLogger.ErrorCode.DataError, "No recipe found in DB");
424 .setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
425 Response response = msoRequest.buildServiceErrorResponse(
426 HttpStatus.SC_NOT_FOUND, MsoException.ServiceException,
427 "Recipe does not exist in catalog DB",
428 ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, null);
429 msoRequest.createRequestRecord(Status.FAILED, action);
430 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
431 MsoLogger.ResponseCode.DataNotFound,
432 "No recipe found in DB");
433 msoLogger.debug(END_OF_THE_TRANSACTION
434 + (String) response.getEntity());
438 RequestClient requestClient = null;
439 HttpResponse response = null;
441 long subStartTime = System.currentTimeMillis();
443 requestClient = RequestClientFactory.getRequestClient(
444 recipeLookupResult.getOrchestrationURI(),
445 MsoPropertiesUtils.loadMsoProperties());
447 JSONObject jjo = new JSONObject(requestJSON);
448 jjo.put("operationId", UUIDChecker.generateUUID(msoLogger));
449 // Capture audit event
451 .debug("MSO API Handler Posting call to BPEL engine for url: "
452 + requestClient.getUrl());
454 RequestClientParamater requestClientParamater = new RequestClientParamater.Builder().setRequestId(requestId).
455 setBaseVfModule(false).setRecipeTimeout(recipeLookupResult.getRecipeTimeout()).
456 setRequestAction(action.name()).setServiceInstanceId(instanceIdMap.get("serviceId")).
457 setServiceType(e2eDelReq.getServiceType()).setRequestDetails(jjo.toString()).
458 setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd()).build();
459 response = requestClient.post(requestClientParamater);
461 msoLogger.recordMetricEvent(subStartTime,
462 MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
463 "Successfully received response from BPMN engine", "BPMN",
464 recipeLookupResult.getOrchestrationURI(), null);
465 } catch (Exception e) {
466 msoLogger.recordMetricEvent(subStartTime,
467 MsoLogger.StatusCode.ERROR,
468 MsoLogger.ResponseCode.CommunicationError,
469 "Exception while communicate with BPMN engine", "BPMN",
470 recipeLookupResult.getOrchestrationURI(), null);
471 Response resp = msoRequest.buildServiceErrorResponse(
472 HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,
473 "Failed calling bpmn " + e.getMessage(),
474 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
475 alarmLogger.sendAlarm("MsoConfigurationError",
476 MsoAlarmLogger.CRITICAL,
477 Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_BPEL));
478 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,
479 MSO_PROP_APIHANDLER_INFRA, "", "",
480 MsoLogger.ErrorCode.AvailabilityError,
481 "Exception while communicate with BPMN engine");
482 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
483 MsoLogger.ResponseCode.CommunicationError,
484 "Exception while communicate with BPMN engine");
485 msoLogger.debug("End of the transaction, the final response is: "
486 + (String) resp.getEntity());
490 if (response == null) {
491 Response resp = msoRequest.buildServiceErrorResponse(
492 HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,
493 "bpelResponse is null",
494 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
495 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,
496 MSO_PROP_APIHANDLER_INFRA, "", "",
497 MsoLogger.ErrorCode.BusinessProcesssError,
498 "Null response from BPEL");
499 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
500 MsoLogger.ResponseCode.InternalError,
501 "Null response from BPMN");
502 msoLogger.debug(END_OF_THE_TRANSACTION + (String) resp.getEntity());
506 ResponseHandler respHandler = new ResponseHandler(response,
507 requestClient.getType());
508 int bpelStatus = respHandler.getStatus();
510 return beplStatusUpdate(requestId, startTime, msoRequest,
511 requestClient, respHandler, bpelStatus, action, instanceIdMap);
514 private Response updateE2EserviceInstances(String requestJSON, Action action,
515 HashMap<String, String> instanceIdMap, String version) {
517 String requestId = UUIDChecker.generateUUID(msoLogger);
518 long startTime = System.currentTimeMillis();
519 msoLogger.debug("requestId is: " + requestId);
520 E2EServiceInstanceRequest e2eSir = null;
521 String serviceId = instanceIdMap.get("serviceId");
523 MsoRequest msoRequest = new MsoRequest(requestId);
524 ObjectMapper mapper = new ObjectMapper();
526 e2eSir = mapper.readValue(requestJSON, E2EServiceInstanceRequest.class);
528 } catch (Exception e) {
530 msoLogger.debug("Mapping of request to JSON object failed : ", e);
531 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST,
532 MsoException.ServiceException, "Mapping of request to JSON object failed. " + e.getMessage(),
533 ErrorNumbers.SVC_BAD_PARAMETER, null);
534 msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
535 MsoLogger.ErrorCode.SchemaError, requestJSON, e);
536 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError,
537 "Mapping of request to JSON object failed");
538 msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());
542 mapReqJsonToSvcInstReq(e2eSir, requestJSON);
543 sir.getRequestDetails().getRequestParameters().setaLaCarte(true);
545 msoRequest.parse(sir, instanceIdMap, action, version, requestJSON);
546 } catch (Exception e) {
547 msoLogger.debug("Validation failed: ", e);
548 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST,
549 MsoException.ServiceException, "Error parsing request. " + e.getMessage(),
550 ErrorNumbers.SVC_BAD_PARAMETER, null);
551 if (msoRequest.getRequestId() != null) {
552 msoLogger.debug("Logging failed message to the database");
554 msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
555 MsoLogger.ErrorCode.SchemaError, requestJSON, e);
556 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError,
557 "Validation of the input request failed");
558 msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());
562 CatalogDatabase db = null;
563 RecipeLookupResult recipeLookupResult = null;
565 db = CatalogDatabase.getInstance();
566 recipeLookupResult = getServiceInstanceOrchestrationURI(db, e2eSir.getService().getServiceUuid(), action);
567 } catch (Exception e) {
568 msoLogger.error(MessageEnum.APIH_DB_ACCESS_EXC, MSO_PROP_APIHANDLER_INFRA, "", "",
569 MsoLogger.ErrorCode.AvailabilityError, "Exception while communciate with Catalog DB", e);
570 msoRequest.setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
571 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_NOT_FOUND,
572 MsoException.ServiceException, "No communication to catalog DB " + e.getMessage(),
573 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
574 alarmLogger.sendAlarm("MsoDatabaseAccessError", MsoAlarmLogger.CRITICAL,
575 Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB));
577 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError,
578 "Exception while communciate with DB");
579 msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());
586 if (recipeLookupResult == null) {
587 msoLogger.error(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MSO_PROP_APIHANDLER_INFRA, "", "",
588 MsoLogger.ErrorCode.DataError, "No recipe found in DB");
589 msoRequest.setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
590 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_NOT_FOUND,
591 MsoException.ServiceException, "Recipe does not exist in catalog DB",
592 ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, null);
594 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound,
595 "No recipe found in DB");
596 msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());
601 String serviceInstanceType = e2eSir.getService().getServiceType();
603 RequestClient requestClient = null;
604 HttpResponse response = null;
606 long subStartTime = System.currentTimeMillis();
608 requestClient = RequestClientFactory.getRequestClient(recipeLookupResult.getOrchestrationURI(),
609 MsoPropertiesUtils.loadMsoProperties());
611 // Capture audit event
612 msoLogger.debug("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl());
613 RequestClientParamater requestClientParamater = new RequestClientParamater.Builder().setRequestId(requestId).
614 setBaseVfModule(false).setRecipeTimeout(recipeLookupResult.getRecipeTimeout()).setRequestAction(action.name()).
615 setServiceInstanceId(serviceId).setServiceType(serviceInstanceType).
616 setRequestDetails(mapReqJsonToSvcInstReq(e2eSir, requestJSON)).
617 setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd()).build();
619 response = requestClient.post(requestClientParamater);
621 msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
622 "Successfully received response from BPMN engine", "BPMN", recipeLookupResult.getOrchestrationURI(),
624 } catch (Exception e) {
625 msoLogger.debug("Exception while communicate with BPMN engine", e);
626 msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.ERROR,
627 MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine", "BPMN",
628 recipeLookupResult.getOrchestrationURI(), null);
629 Response getBPMNResp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
630 MsoException.ServiceException, "Failed calling bpmn " + e.getMessage(),
631 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
632 alarmLogger.sendAlarm("MsoConfigurationError", MsoAlarmLogger.CRITICAL,
633 Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_BPEL));
634 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
635 MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine");
636 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError,
637 "Exception while communicate with BPMN engine");
638 msoLogger.debug("End of the transaction, the final response is: " + (String) getBPMNResp.getEntity());
643 if (response == null) {
644 Response getBPMNResp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
645 MsoException.ServiceException, "bpelResponse is null", ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
646 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
647 MsoLogger.ErrorCode.BusinessProcesssError, "Null response from BPEL");
648 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError,
649 "Null response from BPMN");
650 msoLogger.debug(END_OF_THE_TRANSACTION + (String) getBPMNResp.getEntity());
655 ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
656 int bpelStatus = respHandler.getStatus();
658 return beplStatusUpdate(serviceId, startTime, msoRequest, requestClient, respHandler, bpelStatus, action, instanceIdMap);
661 private Response processE2EserviceInstances(String requestJSON, Action action,
662 HashMap<String, String> instanceIdMap, String version) {
664 String requestId = UUIDChecker.generateUUID(msoLogger);
665 long startTime = System.currentTimeMillis();
666 msoLogger.debug("requestId is: " + requestId);
667 E2EServiceInstanceRequest e2eSir = null;
669 MsoRequest msoRequest = new MsoRequest(requestId);
670 ObjectMapper mapper = new ObjectMapper();
672 e2eSir = mapper.readValue(requestJSON, E2EServiceInstanceRequest.class);
674 } catch (Exception e) {
676 msoLogger.debug("Mapping of request to JSON object failed : ", e);
677 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST,
678 MsoException.ServiceException, "Mapping of request to JSON object failed. " + e.getMessage(),
679 ErrorNumbers.SVC_BAD_PARAMETER, null);
680 msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
681 MsoLogger.ErrorCode.SchemaError, requestJSON, e);
682 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError,
683 "Mapping of request to JSON object failed");
684 msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());
688 mapReqJsonToSvcInstReq(e2eSir, requestJSON);
689 sir.getRequestDetails().getRequestParameters().setaLaCarte(true);
691 msoRequest.parse(sir, instanceIdMap, action, version, requestJSON);
692 } catch (Exception e) {
693 msoLogger.debug("Validation failed: ", e);
694 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST,
695 MsoException.ServiceException, "Error parsing request. " + e.getMessage(),
696 ErrorNumbers.SVC_BAD_PARAMETER, null);
697 if (msoRequest.getRequestId() != null) {
698 msoLogger.debug("Logging failed message to the database");
700 msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
701 MsoLogger.ErrorCode.SchemaError, requestJSON, e);
702 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError,
703 "Validation of the input request failed");
704 msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());
708 CatalogDatabase db = null;
709 RecipeLookupResult recipeLookupResult = null;
711 db = CatalogDatabase.getInstance();
712 recipeLookupResult = getServiceInstanceOrchestrationURI(db, e2eSir.getService().getServiceUuid(), action);
713 } catch (Exception e) {
714 msoLogger.error(MessageEnum.APIH_DB_ACCESS_EXC, MSO_PROP_APIHANDLER_INFRA, "", "",
715 MsoLogger.ErrorCode.AvailabilityError, "Exception while communciate with Catalog DB", e);
716 msoRequest.setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
717 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_NOT_FOUND,
718 MsoException.ServiceException, "No communication to catalog DB " + e.getMessage(),
719 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
720 alarmLogger.sendAlarm("MsoDatabaseAccessError", MsoAlarmLogger.CRITICAL,
721 Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB));
723 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError,
724 "Exception while communciate with DB");
725 msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());
731 if (recipeLookupResult == null) {
732 msoLogger.error(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MSO_PROP_APIHANDLER_INFRA, "", "",
733 MsoLogger.ErrorCode.DataError, "No recipe found in DB");
734 msoRequest.setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
735 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_NOT_FOUND,
736 MsoException.ServiceException, "Recipe does not exist in catalog DB",
737 ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, null);
739 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound,
740 "No recipe found in DB");
741 msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());
745 RequestClient requestClient = null;
746 HttpResponse response = null;
748 long subStartTime = System.currentTimeMillis();
750 requestClient = RequestClientFactory.getRequestClient(recipeLookupResult.getOrchestrationURI(),
751 MsoPropertiesUtils.loadMsoProperties());
753 // Capture audit event
754 msoLogger.debug("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl());
755 RequestClientParamater requestClientParamater = new RequestClientParamater.Builder().setRequestId(requestId).
756 setBaseVfModule(false).setRecipeTimeout(recipeLookupResult.getRecipeTimeout()).setRequestAction(action.name()).
757 setServiceInstanceId("").setServiceType(e2eSir.getService().getServiceType()).
758 setRequestDetails(mapReqJsonToSvcInstReq(e2eSir, requestJSON)).
759 setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd()).build();
761 response = requestClient.post(requestClientParamater);
763 msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
764 "Successfully received response from BPMN engine", "BPMN", recipeLookupResult.getOrchestrationURI(),
766 } catch (Exception e) {
767 msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.ERROR,
768 MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine", "BPMN",
769 recipeLookupResult.getOrchestrationURI(), null);
770 Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
771 MsoException.ServiceException, "Failed calling bpmn " + e.getMessage(),
772 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
773 alarmLogger.sendAlarm("MsoConfigurationError", MsoAlarmLogger.CRITICAL,
774 Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_BPEL));
775 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
776 MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine");
777 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError,
778 "Exception while communicate with BPMN engine");
779 msoLogger.debug("End of the transaction, the final response is: " + (String) resp.getEntity());
783 if (response == null) {
784 Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
785 MsoException.ServiceException, "bpelResponse is null", ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
786 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
787 MsoLogger.ErrorCode.BusinessProcesssError, "Null response from BPEL");
788 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError,
789 "Null response from BPMN");
790 msoLogger.debug(END_OF_THE_TRANSACTION + (String) resp.getEntity());
794 ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
795 int bpelStatus = respHandler.getStatus();
797 return beplStatusUpdate(requestId, startTime, msoRequest, requestClient, respHandler, bpelStatus, action, instanceIdMap);
800 private Response scaleE2EserviceInstances(String requestJSON,
801 Action action, HashMap<String, String> instanceIdMap, String version) {
803 String requestId = UUIDChecker.generateUUID(msoLogger);
804 long startTime = System.currentTimeMillis();
805 msoLogger.debug("requestId is: " + requestId);
806 E2EServiceInstanceScaleRequest e2eScaleReq = null;
808 MsoRequest msoRequest = new MsoRequest(requestId);
810 ObjectMapper mapper = new ObjectMapper();
812 e2eScaleReq = mapper.readValue(requestJSON,
813 E2EServiceInstanceScaleRequest.class);
815 } catch (Exception e) {
817 msoLogger.debug("Mapping of request to JSON object failed : ", e);
818 Response response = msoRequest.buildServiceErrorResponse(
819 HttpStatus.SC_BAD_REQUEST,
820 MsoException.ServiceException,
821 "Mapping of request to JSON object failed. "
822 + e.getMessage(), ErrorNumbers.SVC_BAD_PARAMETER,
824 msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR,
825 MSO_PROP_APIHANDLER_INFRA, "", "",
826 MsoLogger.ErrorCode.SchemaError, requestJSON, e);
827 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
828 MsoLogger.ResponseCode.SchemaError,
829 "Mapping of request to JSON object failed");
830 msoLogger.debug("End of the transaction, the final response is: "
831 + (String) response.getEntity());
835 CatalogDatabase db = null;
836 RecipeLookupResult recipeLookupResult = null;
838 db = CatalogDatabase.getInstance();
839 //TODO Get the service template model version uuid from AAI.
840 recipeLookupResult = getServiceInstanceOrchestrationURI(db, null, action);
841 } catch (Exception e) {
842 msoLogger.error(MessageEnum.APIH_DB_ACCESS_EXC,
843 MSO_PROP_APIHANDLER_INFRA, "", "",
844 MsoLogger.ErrorCode.AvailabilityError,
845 "Exception while communciate with Catalog DB", e);
847 .setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
848 Response response = msoRequest.buildServiceErrorResponse(
849 HttpStatus.SC_NOT_FOUND, MsoException.ServiceException,
850 "No communication to catalog DB " + e.getMessage(),
851 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
852 alarmLogger.sendAlarm("MsoDatabaseAccessError",
853 MsoAlarmLogger.CRITICAL, Messages.errors
854 .get(ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB));
855 msoRequest.createRequestRecord(Status.FAILED, action);
856 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
857 MsoLogger.ResponseCode.DBAccessError,
858 "Exception while communciate with DB");
859 msoLogger.debug(END_OF_THE_TRANSACTION
860 + (String) response.getEntity());
865 if (recipeLookupResult == null) {
866 msoLogger.error(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND,
867 MSO_PROP_APIHANDLER_INFRA, "", "",
868 MsoLogger.ErrorCode.DataError, "No recipe found in DB");
870 .setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
871 Response response = msoRequest.buildServiceErrorResponse(
872 HttpStatus.SC_NOT_FOUND, MsoException.ServiceException,
873 "Recipe does not exist in catalog DB",
874 ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, null);
875 msoRequest.createRequestRecord(Status.FAILED, action);
876 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
877 MsoLogger.ResponseCode.DataNotFound,
878 "No recipe found in DB");
879 msoLogger.debug(END_OF_THE_TRANSACTION
880 + (String) response.getEntity());
884 RequestClient requestClient = null;
885 HttpResponse response = null;
887 long subStartTime = System.currentTimeMillis();
889 requestClient = RequestClientFactory.getRequestClient(
890 recipeLookupResult.getOrchestrationURI(),
891 MsoPropertiesUtils.loadMsoProperties());
893 JSONObject jjo = new JSONObject(requestJSON);
894 jjo.put("operationId", UUIDChecker.generateUUID(msoLogger));
896 // Capture audit event
898 .debug("MSO API Handler Posting call to BPEL engine for url: "
899 + requestClient.getUrl());
900 RequestClientParamater requestClientParamater = new RequestClientParamater.Builder().setRequestId(requestId).
901 setBaseVfModule(false).setRecipeTimeout(recipeLookupResult.getRecipeTimeout()).setRequestAction(action.name()).
902 setServiceInstanceId(instanceIdMap.get("serviceId")).
903 setServiceType(e2eScaleReq.getService().getServiceType()).
904 setRequestDetails(jjo.toString()).
905 setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd()).build();
907 response = requestClient.post(requestClientParamater);
909 msoLogger.recordMetricEvent(subStartTime,
910 MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
911 "Successfully received response from BPMN engine", "BPMN",
912 recipeLookupResult.getOrchestrationURI(), null);
913 } catch (Exception e) {
914 msoLogger.recordMetricEvent(subStartTime,
915 MsoLogger.StatusCode.ERROR,
916 MsoLogger.ResponseCode.CommunicationError,
917 "Exception while communicate with BPMN engine", "BPMN",
918 recipeLookupResult.getOrchestrationURI(), null);
919 Response resp = msoRequest.buildServiceErrorResponse(
920 HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,
921 "Failed calling bpmn " + e.getMessage(),
922 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
923 alarmLogger.sendAlarm("MsoConfigurationError",
924 MsoAlarmLogger.CRITICAL,
925 Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_BPEL));
926 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,
927 MSO_PROP_APIHANDLER_INFRA, "", "",
928 MsoLogger.ErrorCode.AvailabilityError,
929 "Exception while communicate with BPMN engine",e);
930 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
931 MsoLogger.ResponseCode.CommunicationError,
932 "Exception while communicate with BPMN engine");
933 msoLogger.debug("End of the transaction, the final response is: "
934 + (String) resp.getEntity());
938 if (response == null) {
939 Response resp = msoRequest.buildServiceErrorResponse(
940 HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,
941 "bpelResponse is null",
942 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
943 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,
944 MSO_PROP_APIHANDLER_INFRA, "", "",
945 MsoLogger.ErrorCode.BusinessProcesssError,
946 "Null response from BPEL");
947 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
948 MsoLogger.ResponseCode.InternalError,
949 "Null response from BPMN");
950 msoLogger.debug(END_OF_THE_TRANSACTION + (String) resp.getEntity());
954 ResponseHandler respHandler = new ResponseHandler(response,
955 requestClient.getType());
956 int bpelStatus = respHandler.getStatus();
958 return beplStatusUpdate(requestId, startTime, msoRequest,
959 requestClient, respHandler, bpelStatus, action, instanceIdMap);
962 private void closeCatalogDB(CatalogDatabase db) {
968 private Response beplStatusUpdate(String serviceId, long startTime,
969 MsoRequest msoRequest, RequestClient requestClient,
970 ResponseHandler respHandler, int bpelStatus, Action action,
971 HashMap<String, String> instanceIdMap) {
972 // BPMN accepted the request, the request is in progress
973 if (bpelStatus == HttpStatus.SC_ACCEPTED) {
974 String camundaJSONResponseBody = respHandler.getContent();
975 msoLogger.debug("Received from Camunda: " + camundaJSONResponseBody);
976 msoLogger.recordAuditEvent(startTime,
977 MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
978 "BPMN accepted the request, the request is in progress");
979 msoLogger.debug(END_OF_THE_TRANSACTION + camundaJSONResponseBody);
980 return Response.status(HttpStatus.SC_ACCEPTED)
981 .entity(camundaJSONResponseBody).build();
983 List<String> variables = new ArrayList<>();
984 variables.add(bpelStatus + "");
985 String camundaJSONResponseBody = respHandler.getContent();
986 if (camundaJSONResponseBody != null
987 && !camundaJSONResponseBody.isEmpty()) {
988 Response resp = msoRequest.buildServiceErrorResponse(
989 bpelStatus, MsoException.ServiceException,
990 "Request Failed due to BPEL error with HTTP Status= %1 "
991 + '\n' + camundaJSONResponseBody,
992 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, variables);
993 msoLogger.error(MessageEnum.APIH_BPEL_RESPONSE_ERROR,
994 requestClient.getUrl(), "", "",
995 MsoLogger.ErrorCode.BusinessProcesssError,
996 "Response from BPEL engine is failed with HTTP Status="
998 msoLogger.recordAuditEvent(startTime,
999 MsoLogger.StatusCode.ERROR,
1000 MsoLogger.ResponseCode.InternalError,
1001 "Response from BPMN engine is failed");
1002 msoLogger.debug(END_OF_THE_TRANSACTION
1003 + (String) resp.getEntity());
1006 Response resp = msoRequest
1007 .buildServiceErrorResponse(
1009 MsoException.ServiceException,
1010 "Request Failed due to BPEL error with HTTP Status= %1",
1011 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR,
1013 msoLogger.error(MessageEnum.APIH_BPEL_RESPONSE_ERROR,
1014 requestClient.getUrl(), "", "",
1015 MsoLogger.ErrorCode.BusinessProcesssError,
1016 "Response from BPEL engine is empty");
1017 msoLogger.recordAuditEvent(startTime,
1018 MsoLogger.StatusCode.ERROR,
1019 MsoLogger.ResponseCode.InternalError,
1020 "Response from BPEL engine is empty");
1021 msoLogger.debug(END_OF_THE_TRANSACTION
1022 + (String) resp.getEntity());
1029 * Getting recipes from catalogDb
1031 * @param db the catalog db
1032 * @param serviceModelUUID the service model version uuid
1033 * @param action the action for the service
1034 * @return the service recipe result
1036 private RecipeLookupResult getServiceInstanceOrchestrationURI(
1037 CatalogDatabase db, String serviceModelUUID, Action action) {
1039 RecipeLookupResult recipeLookupResult = getServiceURI(db, serviceModelUUID, action);
1041 if (recipeLookupResult != null) {
1042 msoLogger.debug("Orchestration URI is: "
1043 + recipeLookupResult.getOrchestrationURI()
1044 + ", recipe Timeout is: "
1045 + Integer.toString(recipeLookupResult.getRecipeTimeout()));
1047 msoLogger.debug("No matching recipe record found");
1049 return recipeLookupResult;
1053 * Getting recipes from catalogDb
1054 * If Service recipe is not set, use default recipe, if set , use special recipe.
1055 * @param db the catalog db
1056 * @param serviceModelUUID the service version uuid
1057 * @param action the action of the service.
1058 * @return the service recipe result.
1060 private RecipeLookupResult getServiceURI(CatalogDatabase db, String serviceModelUUID, Action action) {
1062 String defaultServiceModelName = "UUI_DEFAULT";
1064 Service defaultServiceRecord = db
1065 .getServiceByModelName(defaultServiceModelName);
1066 ServiceRecipe defaultRecipe = db.getServiceRecipeByModelUUID(
1067 defaultServiceRecord.getModelUUID(), action.name());
1068 //set recipe as default generic recipe
1069 ServiceRecipe recipe = defaultRecipe;
1070 //check the service special recipe
1071 if(null != serviceModelUUID && ! serviceModelUUID.isEmpty()){
1072 ServiceRecipe serviceSpecialRecipe = db.getServiceRecipeByModelUUID(
1073 serviceModelUUID, action.name());
1074 if(null != serviceSpecialRecipe){
1075 //set service special recipe.
1076 recipe = serviceSpecialRecipe;
1080 if (recipe == null) {
1083 return new RecipeLookupResult(recipe.getOrchestrationUri(),
1084 recipe.getRecipeTimeout(), recipe.getServiceParamXSD());
1089 * Converting E2EServiceInstanceRequest to ServiceInstanceRequest and
1090 * passing it to camunda engine.
1095 private String mapReqJsonToSvcInstReq(E2EServiceInstanceRequest e2eSir,
1096 String requestJSON) {
1098 sir = new ServiceInstancesRequest();
1100 String returnString = null;
1101 RequestDetails requestDetails = new RequestDetails();
1102 ModelInfo modelInfo = new ModelInfo();
1105 modelInfo.setModelInvariantId(e2eSir.getService().getServiceInvariantUuid());
1107 // modelNameVersionId
1108 modelInfo.setModelNameVersionId(e2eSir.getService().getServiceUuid());
1110 // String modelInfoValue =
1111 // e2eSir.getService().getParameters().getNodeTemplateName();
1112 // String[] arrayOfInfo = modelInfoValue.split(":");
1113 // String modelName = arrayOfInfo[0];
1114 // String modelVersion = arrayOfInfo[1];
1116 // TODO: To ensure, if we dont get the values from the UUI
1117 String modelName = "voLTE";
1118 String modelVersion = "1.0";
1120 modelInfo.setModelName(modelName);
1123 modelInfo.setModelVersion(modelVersion);
1126 modelInfo.setModelType(ModelType.service);
1128 // setting modelInfo to requestDetails
1129 requestDetails.setModelInfo(modelInfo);
1131 SubscriberInfo subscriberInfo = new SubscriberInfo();
1133 // globalsubscriberId
1134 subscriberInfo.setGlobalSubscriberId(e2eSir.getService().getGlobalSubscriberId());
1136 // setting subscriberInfo to requestDetails
1137 requestDetails.setSubscriberInfo(subscriberInfo);
1139 RequestInfo requestInfo = new RequestInfo();
1142 requestInfo.setInstanceName(e2eSir.getService().getName());
1145 requestInfo.setSource("UUI");
1148 requestInfo.setSuppressRollback(true);
1150 // setting requestInfo to requestDetails
1151 requestDetails.setRequestInfo(requestInfo);
1153 RequestParameters requestParameters = new RequestParameters();
1155 // subscriptionServiceType
1156 requestParameters.setSubscriptionServiceType("MOG");
1159 //List<E2EUserParam> userParams;
1161 // e2eSir.getService().getParameters().getRequestParameters().getUserParams();
1162 List<Map<String, Object>> userParamList = new ArrayList<>();
1163 Map<String, Object> userParamMap = new HashMap<>();
1164 // complete json request updated in the camunda
1165 userParamMap.put("UUIRequest", requestJSON);
1166 userParamMap.put("ServiceInstanceName", e2eSir.getService().getName());
1168 // Map<String, String> userParamMap3 = null;
1169 // for (E2EUserParam userp : userParams) {
1170 // userParamMap.put(userp.getName(), userp.getValue());
1173 userParamList.add(userParamMap);
1174 requestParameters.setUserParams(userParamList);
1176 // setting requestParameters to requestDetails
1177 requestDetails.setRequestParameters(requestParameters);
1179 sir.setRequestDetails(requestDetails);
1181 // converting to string
1182 ObjectMapper mapper = new ObjectMapper();
1184 returnString = mapper.writeValueAsString(sir);
1185 } catch (IOException e) {
1187 .debug("Exception while converting ServiceInstancesRequest object to string",
1191 return returnString;