2 * ============LICENSE_START=======================================================
\r
4 * ================================================================================
\r
5 * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
\r
6 * ================================================================================
\r
7 * Licensed under the Apache License, Version 2.0 (the "License");
\r
8 * you may not use this file except in compliance with the License.
\r
9 * You may obtain a copy of the License at
\r
11 * http://www.apache.org/licenses/LICENSE-2.0
\r
13 * Unless required by applicable law or agreed to in writing, software
\r
14 * distributed under the License is distributed on an "AS IS" BASIS,
\r
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
16 * See the License for the specific language governing permissions and
\r
17 * limitations under the License.
\r
18 * ============LICENSE_END=========================================================
\r
21 package org.openecomp.mso.apihandlerinfra;
\r
23 import java.io.IOException;
\r
24 import java.sql.Timestamp;
\r
25 import java.util.ArrayList;
\r
26 import java.util.HashMap;
\r
27 import java.util.List;
\r
28 import java.util.Map;
\r
30 import javax.ws.rs.Consumes;
\r
31 import javax.ws.rs.DELETE;
\r
32 import javax.ws.rs.GET;
\r
33 import javax.ws.rs.POST;
\r
34 import javax.ws.rs.PUT;
\r
35 import javax.ws.rs.Path;
\r
36 import javax.ws.rs.PathParam;
\r
37 import javax.ws.rs.Produces;
\r
38 import javax.ws.rs.core.MediaType;
\r
39 import javax.ws.rs.core.Response;
\r
41 import org.apache.http.HttpResponse;
\r
42 import org.apache.http.HttpStatus;
\r
43 import com.fasterxml.jackson.databind.ObjectMapper;
\r
44 import org.hibernate.Session;
\r
45 import org.json.JSONObject;
\r
46 import org.openecomp.mso.apihandler.common.ErrorNumbers;
\r
47 import org.openecomp.mso.apihandler.common.RequestClient;
\r
48 import org.openecomp.mso.apihandler.common.RequestClientFactory;
\r
49 import org.openecomp.mso.apihandler.common.ResponseHandler;
\r
50 import org.openecomp.mso.apihandlerinfra.Messages;
\r
51 import org.openecomp.mso.apihandlerinfra.MsoException;
\r
52 import org.openecomp.mso.apihandlerinfra.MsoRequest;
\r
53 import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.CompareModelsRequest;
\r
54 import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.DelE2ESvcResp;
\r
55 import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.E2EServiceInstanceDeleteRequest;
\r
56 import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.E2EServiceInstanceRequest;
\r
57 import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.E2EUserParam;
\r
58 import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.GetE2EServiceInstanceResponse;
\r
59 import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.*;
\r
60 import org.openecomp.mso.serviceinstancebeans.ModelInfo;
\r
61 import org.openecomp.mso.serviceinstancebeans.ModelType;
\r
62 import org.openecomp.mso.serviceinstancebeans.RequestDetails;
\r
63 import org.openecomp.mso.serviceinstancebeans.RequestInfo;
\r
64 import org.openecomp.mso.serviceinstancebeans.RequestParameters;
\r
65 import org.openecomp.mso.serviceinstancebeans.ServiceInstancesRequest;
\r
66 import org.openecomp.mso.serviceinstancebeans.SubscriberInfo;
\r
67 import org.openecomp.mso.db.AbstractSessionFactoryManager;
\r
68 import org.openecomp.mso.db.catalog.CatalogDatabase;
\r
69 import org.openecomp.mso.db.catalog.beans.Service;
\r
70 import org.openecomp.mso.db.catalog.beans.ServiceRecipe;
\r
71 import org.openecomp.mso.logger.MessageEnum;
\r
72 import org.openecomp.mso.logger.MsoAlarmLogger;
\r
73 import org.openecomp.mso.logger.MsoLogger;
\r
74 import org.openecomp.mso.properties.MsoDatabaseException;
\r
75 import org.openecomp.mso.requestsdb.OperationStatus;
\r
76 import org.openecomp.mso.requestsdb.RequestsDatabase;
\r
77 import org.openecomp.mso.requestsdb.RequestsDbSessionFactoryManager;
\r
78 import org.openecomp.mso.utils.UUIDChecker;
\r
80 import com.wordnik.swagger.annotations.Api;
\r
81 import com.wordnik.swagger.annotations.ApiOperation;
\r
83 @Path("/e2eServiceInstances")
\r
84 @Api(value = "/e2eServiceInstances", description = "API Requests for E2E Service Instances")
\r
85 public class E2EServiceInstances {
\r
87 private HashMap<String, String> instanceIdMap = new HashMap<>();
\r
88 private static MsoLogger msoLogger = MsoLogger
\r
89 .getMsoLogger(MsoLogger.Catalog.APIH);
\r
90 private static MsoAlarmLogger alarmLogger = new MsoAlarmLogger();
\r
91 public static final String MSO_PROP_APIHANDLER_INFRA = "MSO_PROP_APIHANDLER_INFRA";
\r
92 private ServiceInstancesRequest sir = null;
\r
94 public static final String END_OF_THE_TRANSACTION = "End of the transaction, the final response is: ";
\r
95 public static final String EXCEPTION_CREATING_DB_RECORD = "Exception while creating record in DB";
\r
96 public static final String EXCEPTION_COMMUNICATE_BPMN_ENGINE = "Exception while communicate with BPMN engine";
\r
99 * POST Requests for E2E Service create Instance on a version provided
\r
103 @Path("/{version:[vV][3-5]}")
\r
104 @Consumes(MediaType.APPLICATION_JSON)
\r
105 @Produces(MediaType.APPLICATION_JSON)
\r
106 @ApiOperation(value = "Create an E2E Service Instance on a version provided", response = Response.class)
\r
107 public Response createE2EServiceInstance(String request,
\r
108 @PathParam("version") String version) {
\r
110 return processE2EserviceInstances(request, Action.createInstance, null,
\r
115 * PUT Requests for E2E Service update Instance on a version provided
\r
119 @Path("/{version:[vV][3-5]}/{serviceId}")
\r
120 @Consumes(MediaType.APPLICATION_JSON)
\r
121 @Produces(MediaType.APPLICATION_JSON)
\r
122 @ApiOperation(value = "Update an E2E Service Instance on a version provided and serviceId", response = Response.class)
\r
123 public Response updateE2EServiceInstance(String request,
\r
124 @PathParam("version") String version,
\r
125 @PathParam("serviceId") String serviceId) {
\r
127 instanceIdMap.put("serviceId", serviceId);
\r
129 return updateE2EserviceInstances(request, Action.updateInstance, instanceIdMap,
\r
134 * DELETE Requests for E2E Service delete Instance on a specified version
\r
139 @Path("/{version:[vV][3-5]}/{serviceId}")
\r
140 @Consumes(MediaType.APPLICATION_JSON)
\r
141 @Produces(MediaType.APPLICATION_JSON)
\r
142 @ApiOperation(value = "Delete E2E Service Instance on a specified version and serviceId", response = Response.class)
\r
143 public Response deleteE2EServiceInstance(String request,
\r
144 @PathParam("version") String version,
\r
145 @PathParam("serviceId") String serviceId) {
\r
147 instanceIdMap.put("serviceId", serviceId);
\r
149 return deleteE2EserviceInstances(request, Action.deleteInstance,
\r
150 instanceIdMap, version);
\r
154 @Path("/{version:[vV][3-5]}/{serviceId}/operations/{operationId}")
\r
155 @ApiOperation(value = "Find e2eServiceInstances Requests for a given serviceId and operationId", response = Response.class)
\r
156 @Produces(MediaType.APPLICATION_JSON)
\r
157 public Response getE2EServiceInstances(
\r
158 @PathParam("serviceId") String serviceId,
\r
159 @PathParam("version") String version,
\r
160 @PathParam("operationId") String operationId) {
\r
161 return getE2EServiceInstances(serviceId, operationId);
\r
165 * Scale Requests for E2E Service scale Instance on a specified version
\r
169 @Path("/{version:[vV][3-5]}/{serviceId}/scale")
\r
170 @Consumes(MediaType.APPLICATION_JSON)
\r
171 @Produces(MediaType.APPLICATION_JSON)
\r
172 @ApiOperation(value="Scale E2E Service Instance on a specified version",response=Response.class)
\r
173 public Response scaleE2EServiceInstance(String request,
\r
174 @PathParam("version") String version,
\r
175 @PathParam("serviceId") String serviceId) {
\r
177 msoLogger.debug("------------------scale begin------------------");
\r
178 instanceIdMap.put("serviceId", serviceId);
\r
179 return scaleE2EserviceInstances(request, Action.scaleInstance, instanceIdMap, version);
\r
182 * GET Requests for Comparing model of service instance with target version
\r
186 @Path("/{version:[vV][3-5]}/{serviceId}/modeldifferences")
\r
187 @Consumes(MediaType.APPLICATION_JSON)
\r
188 @Produces(MediaType.APPLICATION_JSON)
\r
189 @ApiOperation(value = "Find added and deleted resources of target model for the e2eserviceInstance on a given serviceId ", response = Response.class)
\r
190 public Response compareModelwithTargetVersion(String request,
\r
191 @PathParam("serviceId") String serviceId,
\r
192 @PathParam("version") String version) {
\r
194 instanceIdMap.put("serviceId", serviceId);
\r
196 return compareModelwithTargetVersion(request, Action.compareModel, instanceIdMap, version);
\r
199 private Response compareModelwithTargetVersion(String requestJSON, Action action,
\r
200 HashMap<String, String> instanceIdMap, String version) {
\r
202 String requestId = instanceIdMap.get("serviceId");
\r
203 long startTime = System.currentTimeMillis();
\r
204 msoLogger.debug("requestId is: " + requestId);
\r
206 CompareModelsRequest e2eCompareModelReq = null;
\r
208 MsoRequest msoRequest = new MsoRequest(requestId);
\r
210 ObjectMapper mapper = new ObjectMapper();
\r
212 e2eCompareModelReq = mapper.readValue(requestJSON, CompareModelsRequest.class);
\r
214 } catch (Exception e) {
\r
216 msoLogger.debug("Mapping of request to JSON object failed : ", e);
\r
217 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST,
\r
218 MsoException.ServiceException, "Mapping of request to JSON object failed. " + e.getMessage(),
\r
219 ErrorNumbers.SVC_BAD_PARAMETER, null);
\r
220 msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
\r
221 MsoLogger.ErrorCode.SchemaError, requestJSON, e);
\r
222 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError,
\r
223 "Mapping of request to JSON object failed");
\r
224 msoLogger.debug("End of the transaction, the final response is: " + response.getEntity().toString());
\r
229 Response returnResp = runCompareModelBPMWorkflow(e2eCompareModelReq, msoRequest, requestJSON, requestId,
\r
230 startTime, action);
\r
236 private Response runCompareModelBPMWorkflow(CompareModelsRequest e2eCompareModelReq, MsoRequest msoRequest,
\r
237 String requestJSON, String requestId, long startTime, Action action) {
\r
239 // Define RecipeLookupResult info here instead of query DB for efficiency
\r
240 String workflowUrl = "/mso/async/services/CompareModelofE2EServiceInstance";
\r
241 int recipeTimeout = 180;
\r
243 RequestClient requestClient = null;
\r
244 HttpResponse response = null;
\r
246 long subStartTime = System.currentTimeMillis();
\r
249 requestClient = RequestClientFactory.getRequestClient(workflowUrl, MsoPropertiesUtils.loadMsoProperties());
\r
251 JSONObject jjo = new JSONObject(requestJSON);
\r
252 String bpmnRequest = jjo.toString();
\r
254 // Capture audit event
\r
255 msoLogger.debug("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl());
\r
256 String serviceId = instanceIdMap.get("serviceId");
\r
257 String serviceType = e2eCompareModelReq.getServiceType();
\r
258 response = requestClient.post(requestId, false, recipeTimeout, action.name(), serviceId, null, null, null,
\r
259 null, null, serviceType, null, null, null, bpmnRequest, null);
\r
261 msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
\r
262 "Successfully received response from BPMN engine", "BPMN", workflowUrl, null);
\r
263 } catch (Exception e) {
\r
264 msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.ERROR,
\r
265 MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine", "BPMN",
\r
266 workflowUrl, null);
\r
267 Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
\r
268 MsoException.ServiceException, "Failed calling bpmn " + e.getMessage(),
\r
269 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
\r
270 alarmLogger.sendAlarm("MsoConfigurationError", MsoAlarmLogger.CRITICAL,
\r
271 Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_BPEL));
\r
272 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
\r
273 MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine");
\r
274 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError,
\r
275 "Exception while communicate with BPMN engine");
\r
276 msoLogger.debug("End of the transaction, the final response is: " + resp.getEntity().toString());
\r
280 if (response == null) {
\r
281 Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
\r
282 MsoException.ServiceException, "bpelResponse is null", ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
\r
283 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
\r
284 MsoLogger.ErrorCode.BusinessProcesssError, "Null response from BPEL");
\r
285 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError,
\r
286 "Null response from BPMN");
\r
287 msoLogger.debug(END_OF_THE_TRANSACTION + resp.getEntity().toString());
\r
291 ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
\r
292 int bpelStatus = respHandler.getStatus();
\r
293 // String responseBody = respHandler.getResponseBody();
\r
294 // CompareModelsResult modelDiffResponse = new CompareModelsResult();
\r
296 return beplStatusUpdate(requestId, startTime, msoRequest, requestClient, respHandler, bpelStatus, action,
\r
300 private Response getE2EServiceInstances(String serviceId, String operationId) {
\r
301 RequestsDatabase requestsDB = RequestsDatabase.getInstance();
\r
303 GetE2EServiceInstanceResponse e2eServiceResponse = new GetE2EServiceInstanceResponse();
\r
305 MsoRequest msoRequest = new MsoRequest(serviceId);
\r
307 long startTime = System.currentTimeMillis();
\r
309 OperationStatus operationStatus = null;
\r
312 operationStatus = requestsDB.getOperationStatus(serviceId,
\r
315 } catch (Exception e) {
\r
317 .error(MessageEnum.APIH_DB_ACCESS_EXC,
\r
318 MSO_PROP_APIHANDLER_INFRA,
\r
321 MsoLogger.ErrorCode.AvailabilityError,
\r
322 "Exception while communciate with Request DB - Infra Request Lookup",
\r
325 .setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
\r
326 Response response = msoRequest.buildServiceErrorResponse(
\r
327 HttpStatus.SC_NOT_FOUND, MsoException.ServiceException,
\r
329 ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB, null);
\r
330 alarmLogger.sendAlarm("MsoDatabaseAccessError",
\r
331 MsoAlarmLogger.CRITICAL, Messages.errors
\r
332 .get(ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB));
\r
333 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
\r
334 MsoLogger.ResponseCode.DBAccessError,
\r
335 "Exception while communciate with Request DB");
\r
336 msoLogger.debug("End of the transaction, the final response is: "
\r
337 + (String) response.getEntity());
\r
342 if (operationStatus == null) {
\r
343 Response resp = msoRequest.buildServiceErrorResponse(
\r
344 HttpStatus.SC_NO_CONTENT, MsoException.ServiceException,
\r
345 "E2E serviceId " + serviceId + " is not found in DB",
\r
346 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, null);
\r
347 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,
\r
348 MSO_PROP_APIHANDLER_INFRA, "", "",
\r
349 MsoLogger.ErrorCode.BusinessProcesssError,
\r
350 "Null response from RequestDB when searching by serviceId");
\r
351 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
\r
352 MsoLogger.ResponseCode.DataNotFound,
\r
353 "Null response from RequestDB when searching by serviceId");
\r
354 msoLogger.debug("End of the transaction, the final response is: "
\r
355 + (String) resp.getEntity());
\r
360 e2eServiceResponse.setOperationStatus(operationStatus);
\r
362 return Response.status(200).entity(e2eServiceResponse).build();
\r
365 private Response deleteE2EserviceInstances(String requestJSON,
\r
366 Action action, HashMap<String, String> instanceIdMap, String version) {
\r
367 // TODO should be a new one or the same service instance Id
\r
368 String requestId = instanceIdMap.get("serviceId");
\r
369 long startTime = System.currentTimeMillis();
\r
370 msoLogger.debug("requestId is: " + requestId);
\r
371 E2EServiceInstanceDeleteRequest e2eDelReq = null;
\r
373 MsoRequest msoRequest = new MsoRequest(requestId);
\r
375 ObjectMapper mapper = new ObjectMapper();
\r
377 e2eDelReq = mapper.readValue(requestJSON,
\r
378 E2EServiceInstanceDeleteRequest.class);
\r
380 } catch (Exception e) {
\r
382 msoLogger.debug("Mapping of request to JSON object failed : ", e);
\r
383 Response response = msoRequest.buildServiceErrorResponse(
\r
384 HttpStatus.SC_BAD_REQUEST,
\r
385 MsoException.ServiceException,
\r
386 "Mapping of request to JSON object failed. "
\r
387 + e.getMessage(), ErrorNumbers.SVC_BAD_PARAMETER,
\r
389 msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR,
\r
390 MSO_PROP_APIHANDLER_INFRA, "", "",
\r
391 MsoLogger.ErrorCode.SchemaError, requestJSON, e);
\r
392 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
\r
393 MsoLogger.ResponseCode.SchemaError,
\r
394 "Mapping of request to JSON object failed");
\r
395 msoLogger.debug("End of the transaction, the final response is: "
\r
396 + (String) response.getEntity());
\r
397 createOperationStatusRecordForError(action, requestId);
\r
401 CatalogDatabase db = null;
\r
402 RecipeLookupResult recipeLookupResult = null;
\r
404 db = CatalogDatabase.getInstance();
\r
405 //TODO Get the service template model version uuid from AAI.
\r
406 recipeLookupResult = getServiceInstanceOrchestrationURI(db, null, action);
\r
407 } catch (Exception e) {
\r
408 msoLogger.error(MessageEnum.APIH_DB_ACCESS_EXC,
\r
409 MSO_PROP_APIHANDLER_INFRA, "", "",
\r
410 MsoLogger.ErrorCode.AvailabilityError,
\r
411 "Exception while communciate with Catalog DB", e);
\r
413 .setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
\r
414 Response response = msoRequest.buildServiceErrorResponse(
\r
415 HttpStatus.SC_NOT_FOUND, MsoException.ServiceException,
\r
416 "No communication to catalog DB " + e.getMessage(),
\r
417 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
\r
418 alarmLogger.sendAlarm("MsoDatabaseAccessError",
\r
419 MsoAlarmLogger.CRITICAL, Messages.errors
\r
420 .get(ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB));
\r
421 msoRequest.createRequestRecord(Status.FAILED, action);
\r
422 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
\r
423 MsoLogger.ResponseCode.DBAccessError,
\r
424 "Exception while communciate with DB");
\r
425 msoLogger.debug(END_OF_THE_TRANSACTION
\r
426 + (String) response.getEntity());
\r
429 closeCatalogDB(db);
\r
431 if (recipeLookupResult == null) {
\r
432 msoLogger.error(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND,
\r
433 MSO_PROP_APIHANDLER_INFRA, "", "",
\r
434 MsoLogger.ErrorCode.DataError, "No recipe found in DB");
\r
436 .setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
\r
437 Response response = msoRequest.buildServiceErrorResponse(
\r
438 HttpStatus.SC_NOT_FOUND, MsoException.ServiceException,
\r
439 "Recipe does not exist in catalog DB",
\r
440 ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, null);
\r
441 msoRequest.createRequestRecord(Status.FAILED, action);
\r
442 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
\r
443 MsoLogger.ResponseCode.DataNotFound,
\r
444 "No recipe found in DB");
\r
445 msoLogger.debug(END_OF_THE_TRANSACTION
\r
446 + (String) response.getEntity());
\r
447 createOperationStatusRecordForError(action, requestId);
\r
451 RequestClient requestClient = null;
\r
452 HttpResponse response = null;
\r
454 long subStartTime = System.currentTimeMillis();
\r
455 // String sirRequestJson = mapReqJsonToSvcInstReq(e2eSir, requestJSON);
\r
458 requestClient = RequestClientFactory.getRequestClient(
\r
459 recipeLookupResult.getOrchestrationURI(),
\r
460 MsoPropertiesUtils.loadMsoProperties());
\r
462 JSONObject jjo = new JSONObject(requestJSON);
\r
463 jjo.put("operationId", UUIDChecker.generateUUID(msoLogger));
\r
465 String bpmnRequest = jjo.toString();
\r
467 // Capture audit event
\r
469 .debug("MSO API Handler Posting call to BPEL engine for url: "
\r
470 + requestClient.getUrl());
\r
471 String serviceId = instanceIdMap.get("serviceId");
\r
472 String serviceInstanceType = e2eDelReq.getServiceType();
\r
473 response = requestClient.post(requestId, false,
\r
474 recipeLookupResult.getRecipeTimeout(), action.name(),
\r
475 serviceId, null, null, null, null, null, serviceInstanceType,
\r
476 null, null, null, bpmnRequest, recipeLookupResult.getRecipeParamXsd());
\r
478 msoLogger.recordMetricEvent(subStartTime,
\r
479 MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
\r
480 "Successfully received response from BPMN engine", "BPMN",
\r
481 recipeLookupResult.getOrchestrationURI(), null);
\r
482 } catch (Exception e) {
\r
483 msoLogger.recordMetricEvent(subStartTime,
\r
484 MsoLogger.StatusCode.ERROR,
\r
485 MsoLogger.ResponseCode.CommunicationError,
\r
486 "Exception while communicate with BPMN engine", "BPMN",
\r
487 recipeLookupResult.getOrchestrationURI(), null);
\r
488 Response resp = msoRequest.buildServiceErrorResponse(
\r
489 HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,
\r
490 "Failed calling bpmn " + e.getMessage(),
\r
491 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
\r
492 alarmLogger.sendAlarm("MsoConfigurationError",
\r
493 MsoAlarmLogger.CRITICAL,
\r
494 Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_BPEL));
\r
495 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,
\r
496 MSO_PROP_APIHANDLER_INFRA, "", "",
\r
497 MsoLogger.ErrorCode.AvailabilityError,
\r
498 "Exception while communicate with BPMN engine");
\r
499 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
\r
500 MsoLogger.ResponseCode.CommunicationError,
\r
501 "Exception while communicate with BPMN engine");
\r
502 msoLogger.debug("End of the transaction, the final response is: "
\r
503 + (String) resp.getEntity());
\r
504 createOperationStatusRecordForError(action, requestId);
\r
508 if (response == null) {
\r
509 Response resp = msoRequest.buildServiceErrorResponse(
\r
510 HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,
\r
511 "bpelResponse is null",
\r
512 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
\r
513 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,
\r
514 MSO_PROP_APIHANDLER_INFRA, "", "",
\r
515 MsoLogger.ErrorCode.BusinessProcesssError,
\r
516 "Null response from BPEL");
\r
517 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
\r
518 MsoLogger.ResponseCode.InternalError,
\r
519 "Null response from BPMN");
\r
520 msoLogger.debug(END_OF_THE_TRANSACTION + (String) resp.getEntity());
\r
521 createOperationStatusRecordForError(action, requestId);
\r
525 ResponseHandler respHandler = new ResponseHandler(response,
\r
526 requestClient.getType());
\r
527 int bpelStatus = respHandler.getStatus();
\r
529 return beplStatusUpdate(requestId, startTime, msoRequest,
\r
530 requestClient, respHandler, bpelStatus, action, instanceIdMap);
\r
533 private Response updateE2EserviceInstances(String requestJSON, Action action,
\r
534 HashMap<String, String> instanceIdMap, String version) {
\r
536 String requestId = UUIDChecker.generateUUID(msoLogger);
\r
537 long startTime = System.currentTimeMillis();
\r
538 msoLogger.debug("requestId is: " + requestId);
\r
539 E2EServiceInstanceRequest e2eSir = null;
\r
541 MsoRequest msoRequest = new MsoRequest(requestId);
\r
542 ObjectMapper mapper = new ObjectMapper();
\r
544 e2eSir = mapper.readValue(requestJSON, E2EServiceInstanceRequest.class);
\r
546 } catch (Exception e) {
\r
548 this.createOperationStatusRecordForError(action, requestId);
\r
550 msoLogger.debug("Mapping of request to JSON object failed : ", e);
\r
551 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST,
\r
552 MsoException.ServiceException, "Mapping of request to JSON object failed. " + e.getMessage(),
\r
553 ErrorNumbers.SVC_BAD_PARAMETER, null);
\r
554 msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
\r
555 MsoLogger.ErrorCode.SchemaError, requestJSON, e);
\r
556 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError,
\r
557 "Mapping of request to JSON object failed");
\r
558 msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());
\r
562 mapReqJsonToSvcInstReq(e2eSir, requestJSON);
\r
563 sir.getRequestDetails().getRequestParameters().setaLaCarte(true);
\r
565 msoRequest.parse(sir, instanceIdMap, action, version, requestJSON);
\r
566 } catch (Exception e) {
\r
567 msoLogger.debug("Validation failed: ", e);
\r
568 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST,
\r
569 MsoException.ServiceException, "Error parsing request. " + e.getMessage(),
\r
570 ErrorNumbers.SVC_BAD_PARAMETER, null);
\r
571 if (msoRequest.getRequestId() != null) {
\r
572 msoLogger.debug("Logging failed message to the database");
\r
573 this.createOperationStatusRecordForError(action, requestId);
\r
575 msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
\r
576 MsoLogger.ErrorCode.SchemaError, requestJSON, e);
\r
577 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError,
\r
578 "Validation of the input request failed");
\r
579 msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());
\r
583 //check for the current operation status
\r
584 Response resp = checkE2ESvcInstStatus(action, requestId, startTime, msoRequest);
\r
585 if(resp != null && resp.getStatus() != 200) {
\r
589 CatalogDatabase db = null;
\r
590 RecipeLookupResult recipeLookupResult = null;
\r
592 db = CatalogDatabase.getInstance();
\r
593 recipeLookupResult = getServiceInstanceOrchestrationURI(db, e2eSir.getService().getServiceUuid(), action);
\r
594 } catch (Exception e) {
\r
595 msoLogger.error(MessageEnum.APIH_DB_ACCESS_EXC, MSO_PROP_APIHANDLER_INFRA, "", "",
\r
596 MsoLogger.ErrorCode.AvailabilityError, "Exception while communciate with Catalog DB", e);
\r
597 msoRequest.setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
\r
598 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_NOT_FOUND,
\r
599 MsoException.ServiceException, "No communication to catalog DB " + e.getMessage(),
\r
600 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
\r
601 alarmLogger.sendAlarm("MsoDatabaseAccessError", MsoAlarmLogger.CRITICAL,
\r
602 Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB));
\r
604 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError,
\r
605 "Exception while communciate with DB");
\r
606 msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());
\r
607 createOperationStatusRecordForError(action, requestId);
\r
610 closeCatalogDB(db);
\r
613 if (recipeLookupResult == null) {
\r
614 msoLogger.error(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MSO_PROP_APIHANDLER_INFRA, "", "",
\r
615 MsoLogger.ErrorCode.DataError, "No recipe found in DB");
\r
616 msoRequest.setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
\r
617 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_NOT_FOUND,
\r
618 MsoException.ServiceException, "Recipe does not exist in catalog DB",
\r
619 ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, null);
\r
621 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound,
\r
622 "No recipe found in DB");
\r
623 msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());
\r
624 createOperationStatusRecordForError(action, requestId);
\r
628 String serviceInstanceType = e2eSir.getService().getServiceType();
\r
630 String serviceId = instanceIdMap.get("serviceId");
\r
631 RequestClient requestClient = null;
\r
632 HttpResponse response = null;
\r
634 long subStartTime = System.currentTimeMillis();
\r
635 String sirRequestJson = mapReqJsonToSvcInstReq(e2eSir, requestJSON);
\r
638 requestClient = RequestClientFactory.getRequestClient(recipeLookupResult.getOrchestrationURI(),
\r
639 MsoPropertiesUtils.loadMsoProperties());
\r
641 // Capture audit event
\r
642 msoLogger.debug("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl());
\r
644 response = requestClient.post(requestId, false, recipeLookupResult.getRecipeTimeout(), action.name(),
\r
645 serviceId, null, null, null, null, null, serviceInstanceType, null, null, null, sirRequestJson,
\r
646 recipeLookupResult.getRecipeParamXsd());
\r
648 msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
\r
649 "Successfully received response from BPMN engine", "BPMN", recipeLookupResult.getOrchestrationURI(),
\r
651 } catch (Exception e) {
\r
652 msoLogger.debug("Exception while communicate with BPMN engine", e);
\r
653 msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.ERROR,
\r
654 MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine", "BPMN",
\r
655 recipeLookupResult.getOrchestrationURI(), null);
\r
656 Response getBPMNResp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
\r
657 MsoException.ServiceException, "Failed calling bpmn " + e.getMessage(),
\r
658 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
\r
659 alarmLogger.sendAlarm("MsoConfigurationError", MsoAlarmLogger.CRITICAL,
\r
660 Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_BPEL));
\r
661 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
\r
662 MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine");
\r
663 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError,
\r
664 "Exception while communicate with BPMN engine");
\r
665 msoLogger.debug("End of the transaction, the final response is: " + (String) getBPMNResp.getEntity());
\r
666 createOperationStatusRecordForError(action, requestId);
\r
667 return getBPMNResp;
\r
670 if (response == null) {
\r
671 Response getBPMNResp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
\r
672 MsoException.ServiceException, "bpelResponse is null", ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
\r
673 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
\r
674 MsoLogger.ErrorCode.BusinessProcesssError, "Null response from BPEL");
\r
675 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError,
\r
676 "Null response from BPMN");
\r
677 msoLogger.debug(END_OF_THE_TRANSACTION + (String) getBPMNResp.getEntity());
\r
678 this.createOperationStatusRecordForError(action, requestId);
\r
679 return getBPMNResp;
\r
682 ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
\r
683 int bpelStatus = respHandler.getStatus();
\r
685 return beplStatusUpdate(requestId, startTime, msoRequest, requestClient, respHandler, bpelStatus, action, instanceIdMap);
\r
688 private Response checkE2ESvcInstStatus(Action action, String requestId, long startTime, MsoRequest msoRequest) {
\r
689 OperationStatus curStatus = null;
\r
690 // String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
\r
691 String requestScope = sir.getRequestDetails().getModelInfo().getModelType().name();
\r
693 if (!(requestId == null && "service".equals(requestScope) && (action == Action.updateInstance))) {
\r
694 curStatus = chkSvcInstOperStatusbySvcId(requestId);
\r
696 } catch (Exception e) {
\r
697 msoLogger.error(MessageEnum.APIH_DUPLICATE_CHECK_EXC, MSO_PROP_APIHANDLER_INFRA, "", "",
\r
698 MsoLogger.ErrorCode.DataError, "Error during current operation status check ", e);
\r
700 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_INTERNAL_SERVER_ERROR,
\r
701 MsoException.ServiceException, e.getMessage(), ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, null);
\r
703 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError,
\r
704 "Error during current operation status check");
\r
705 msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());
\r
709 if (curStatus != null && curStatus.getResult() != null && curStatus.getResult().equalsIgnoreCase("processing")) {
\r
710 String chkMessage = "Error: Locked instance - This " + requestScope + " (" + requestId + ") "
\r
711 + "now being worked with a status of " + curStatus.getResult()
\r
712 + ". The latest workflow of instance must be finished or cleaned up.";
\r
714 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_CONFLICT,
\r
715 MsoException.ServiceException, chkMessage, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, null);
\r
717 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.Conflict,
\r
720 msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());
\r
722 createOperationStatusRecordForError(action, requestId);
\r
727 return Response.status(200).entity(null).build();
\r
730 private Response processE2EserviceInstances(String requestJSON, Action action,
\r
731 HashMap<String, String> instanceIdMap, String version) {
\r
733 String requestId = UUIDChecker.generateUUID(msoLogger);
\r
734 long startTime = System.currentTimeMillis();
\r
735 msoLogger.debug("requestId is: " + requestId);
\r
736 E2EServiceInstanceRequest e2eSir = null;
\r
738 MsoRequest msoRequest = new MsoRequest(requestId);
\r
739 ObjectMapper mapper = new ObjectMapper();
\r
741 e2eSir = mapper.readValue(requestJSON, E2EServiceInstanceRequest.class);
\r
743 } catch (Exception e) {
\r
744 //TODO update the service name
\r
745 this.createOperationStatusRecordForError(action, requestId);
\r
747 msoLogger.debug("Mapping of request to JSON object failed : ", e);
\r
748 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST,
\r
749 MsoException.ServiceException, "Mapping of request to JSON object failed. " + e.getMessage(),
\r
750 ErrorNumbers.SVC_BAD_PARAMETER, null);
\r
751 msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
\r
752 MsoLogger.ErrorCode.SchemaError, requestJSON, e);
\r
753 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError,
\r
754 "Mapping of request to JSON object failed");
\r
755 msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());
\r
759 mapReqJsonToSvcInstReq(e2eSir, requestJSON);
\r
760 sir.getRequestDetails().getRequestParameters().setaLaCarte(true);
\r
762 msoRequest.parse(sir, instanceIdMap, action, version, requestJSON);
\r
763 } catch (Exception e) {
\r
764 msoLogger.debug("Validation failed: ", e);
\r
765 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST,
\r
766 MsoException.ServiceException, "Error parsing request. " + e.getMessage(),
\r
767 ErrorNumbers.SVC_BAD_PARAMETER, null);
\r
768 if (msoRequest.getRequestId() != null) {
\r
769 msoLogger.debug("Logging failed message to the database");
\r
770 //TODO update the service name
\r
771 this.createOperationStatusRecordForError(action, requestId);
\r
773 msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
\r
774 MsoLogger.ErrorCode.SchemaError, requestJSON, e);
\r
775 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError,
\r
776 "Validation of the input request failed");
\r
777 msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());
\r
781 OperationStatus dup = null;
\r
782 String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
\r
783 String requestScope = sir.getRequestDetails().getModelInfo().getModelType().name();
\r
785 if (!(instanceName == null && "service".equals(requestScope)
\r
786 && (action == Action.createInstance || action == Action.activateInstance))) {
\r
787 //TODO : Need to check for the duplicate record from the operation status,
\r
788 //TODO : commenting this check for unblocking current testing for now... induces dead code...
\r
789 dup = chkDuplicateServiceNameInOperStatus( instanceName);
\r
791 } catch (Exception e) {
\r
792 msoLogger.error(MessageEnum.APIH_DUPLICATE_CHECK_EXC, MSO_PROP_APIHANDLER_INFRA, "", "",
\r
793 MsoLogger.ErrorCode.DataError, "Error during duplicate check ", e);
\r
795 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_INTERNAL_SERVER_ERROR,
\r
796 MsoException.ServiceException, e.getMessage(), ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, null);
\r
798 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError,
\r
799 "Error during duplicate check");
\r
800 msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());
\r
805 // Found the duplicate record. Return the appropriate error.
\r
806 String instance = null;
\r
807 if (instanceName != null) {
\r
808 instance = instanceName;
\r
810 instance = instanceIdMap.get(requestScope + "InstanceId");
\r
812 String dupMessage = "Error: Locked instance - This " + requestScope + " (" + instance + ") "
\r
813 + "already has a request being worked with a status of " + dup.getProgress() + " (ServiceId - "
\r
814 + dup.getServiceId() + "). The existing request must finish or be cleaned up before proceeding.";
\r
816 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_CONFLICT,
\r
817 MsoException.ServiceException, dupMessage, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, null);
\r
819 msoLogger.warn(MessageEnum.APIH_DUPLICATE_FOUND, dupMessage, "", "", MsoLogger.ErrorCode.SchemaError,
\r
820 "Duplicate request - Subscriber already has a request for this service");
\r
823 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.Conflict,
\r
825 msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());
\r
826 createOperationStatusRecordForError(action, requestId);
\r
830 CatalogDatabase db = null;
\r
831 RecipeLookupResult recipeLookupResult = null;
\r
833 db = CatalogDatabase.getInstance();
\r
834 recipeLookupResult = getServiceInstanceOrchestrationURI(db, e2eSir.getService().getServiceUuid(), action);
\r
835 } catch (Exception e) {
\r
836 msoLogger.error(MessageEnum.APIH_DB_ACCESS_EXC, MSO_PROP_APIHANDLER_INFRA, "", "",
\r
837 MsoLogger.ErrorCode.AvailabilityError, "Exception while communciate with Catalog DB", e);
\r
838 msoRequest.setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
\r
839 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_NOT_FOUND,
\r
840 MsoException.ServiceException, "No communication to catalog DB " + e.getMessage(),
\r
841 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
\r
842 alarmLogger.sendAlarm("MsoDatabaseAccessError", MsoAlarmLogger.CRITICAL,
\r
843 Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB));
\r
845 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError,
\r
846 "Exception while communciate with DB");
\r
847 msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());
\r
848 createOperationStatusRecordForError(action, requestId);
\r
851 closeCatalogDB(db);
\r
854 if (recipeLookupResult == null) {
\r
855 msoLogger.error(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MSO_PROP_APIHANDLER_INFRA, "", "",
\r
856 MsoLogger.ErrorCode.DataError, "No recipe found in DB");
\r
857 msoRequest.setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
\r
858 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_NOT_FOUND,
\r
859 MsoException.ServiceException, "Recipe does not exist in catalog DB",
\r
860 ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, null);
\r
862 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound,
\r
863 "No recipe found in DB");
\r
864 msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());
\r
865 createOperationStatusRecordForError(action, requestId);
\r
869 // msoRequest.createRequestRecord(Status.PENDING, action);
\r
870 // //createOperationStatusRecord(action, requestId);
\r
871 // } catch (Exception e) {
\r
872 // msoLogger.error(MessageEnum.APIH_DB_ACCESS_EXC_REASON, "Exception while creating record in DB", "", "",
\r
873 // MsoLogger.ErrorCode.SchemaError, "Exception while creating record in DB", e);
\r
874 // msoRequest.setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
\r
875 // Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_INTERNAL_SERVER_ERROR,
\r
876 // MsoException.ServiceException, "Exception while creating record in DB " + e.getMessage(),
\r
877 // ErrorNumbers.SVC_BAD_PARAMETER, null);
\r
878 // msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError,
\r
879 // "Exception while creating record in DB");
\r
880 // msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());
\r
881 // return response;
\r
884 String serviceInstanceType = e2eSir.getService().getServiceType();
\r
886 String serviceId = "";
\r
887 RequestClient requestClient = null;
\r
888 HttpResponse response = null;
\r
890 long subStartTime = System.currentTimeMillis();
\r
891 String sirRequestJson = mapReqJsonToSvcInstReq(e2eSir, requestJSON);
\r
894 requestClient = RequestClientFactory.getRequestClient(recipeLookupResult.getOrchestrationURI(),
\r
895 MsoPropertiesUtils.loadMsoProperties());
\r
897 // Capture audit event
\r
898 msoLogger.debug("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl());
\r
900 response = requestClient.post(requestId, false, recipeLookupResult.getRecipeTimeout(), action.name(),
\r
901 serviceId, null, null, null, null, null, serviceInstanceType, null, null, null, sirRequestJson,
\r
902 recipeLookupResult.getRecipeParamXsd());
\r
904 msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
\r
905 "Successfully received response from BPMN engine", "BPMN", recipeLookupResult.getOrchestrationURI(),
\r
907 } catch (Exception e) {
\r
908 msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.ERROR,
\r
909 MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine", "BPMN",
\r
910 recipeLookupResult.getOrchestrationURI(), null);
\r
911 Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
\r
912 MsoException.ServiceException, "Failed calling bpmn " + e.getMessage(),
\r
913 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
\r
914 alarmLogger.sendAlarm("MsoConfigurationError", MsoAlarmLogger.CRITICAL,
\r
915 Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_BPEL));
\r
916 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
\r
917 MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine");
\r
918 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError,
\r
919 "Exception while communicate with BPMN engine");
\r
920 msoLogger.debug("End of the transaction, the final response is: " + (String) resp.getEntity());
\r
921 createOperationStatusRecordForError(action, requestId);
\r
925 if (response == null) {
\r
926 Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
\r
927 MsoException.ServiceException, "bpelResponse is null", ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
\r
928 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
\r
929 MsoLogger.ErrorCode.BusinessProcesssError, "Null response from BPEL");
\r
930 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError,
\r
931 "Null response from BPMN");
\r
932 msoLogger.debug(END_OF_THE_TRANSACTION + (String) resp.getEntity());
\r
936 ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
\r
937 int bpelStatus = respHandler.getStatus();
\r
939 return beplStatusUpdate(requestId, startTime, msoRequest, requestClient, respHandler, bpelStatus, action, instanceIdMap);
\r
942 private Response scaleE2EserviceInstances(String requestJSON,
\r
943 Action action, HashMap<String, String> instanceIdMap, String version) {
\r
945 String requestId = instanceIdMap.get("serviceId");
\r
946 long startTime = System.currentTimeMillis();
\r
947 msoLogger.debug("requestId is: " + requestId);
\r
948 E2EServiceInstanceScaleRequest e2eScaleReq = null;
\r
950 MsoRequest msoRequest = new MsoRequest(requestId);
\r
952 ObjectMapper mapper = new ObjectMapper();
\r
954 e2eScaleReq = mapper.readValue(requestJSON,
\r
955 E2EServiceInstanceScaleRequest.class);
\r
957 } catch (Exception e) {
\r
959 msoLogger.debug("Mapping of request to JSON object failed : ", e);
\r
960 Response response = msoRequest.buildServiceErrorResponse(
\r
961 HttpStatus.SC_BAD_REQUEST,
\r
962 MsoException.ServiceException,
\r
963 "Mapping of request to JSON object failed. "
\r
964 + e.getMessage(), ErrorNumbers.SVC_BAD_PARAMETER,
\r
966 msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR,
\r
967 MSO_PROP_APIHANDLER_INFRA, "", "",
\r
968 MsoLogger.ErrorCode.SchemaError, requestJSON, e);
\r
969 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
\r
970 MsoLogger.ResponseCode.SchemaError,
\r
971 "Mapping of request to JSON object failed");
\r
972 msoLogger.debug("End of the transaction, the final response is: "
\r
973 + (String) response.getEntity());
\r
974 createOperationStatusRecordForError(action, requestId);
\r
978 CatalogDatabase db = null;
\r
979 RecipeLookupResult recipeLookupResult = null;
\r
981 db = CatalogDatabase.getInstance();
\r
982 //TODO Get the service template model version uuid from AAI.
\r
983 recipeLookupResult = getServiceInstanceOrchestrationURI(db, null, action);
\r
984 } catch (Exception e) {
\r
985 msoLogger.error(MessageEnum.APIH_DB_ACCESS_EXC,
\r
986 MSO_PROP_APIHANDLER_INFRA, "", "",
\r
987 MsoLogger.ErrorCode.AvailabilityError,
\r
988 "Exception while communciate with Catalog DB", e);
\r
990 .setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
\r
991 Response response = msoRequest.buildServiceErrorResponse(
\r
992 HttpStatus.SC_NOT_FOUND, MsoException.ServiceException,
\r
993 "No communication to catalog DB " + e.getMessage(),
\r
994 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
\r
995 alarmLogger.sendAlarm("MsoDatabaseAccessError",
\r
996 MsoAlarmLogger.CRITICAL, Messages.errors
\r
997 .get(ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB));
\r
998 msoRequest.createRequestRecord(Status.FAILED, action);
\r
999 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
\r
1000 MsoLogger.ResponseCode.DBAccessError,
\r
1001 "Exception while communciate with DB");
\r
1002 msoLogger.debug(END_OF_THE_TRANSACTION
\r
1003 + (String) response.getEntity());
\r
1006 closeCatalogDB(db);
\r
1008 if (recipeLookupResult == null) {
\r
1009 msoLogger.error(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND,
\r
1010 MSO_PROP_APIHANDLER_INFRA, "", "",
\r
1011 MsoLogger.ErrorCode.DataError, "No recipe found in DB");
\r
1013 .setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
\r
1014 Response response = msoRequest.buildServiceErrorResponse(
\r
1015 HttpStatus.SC_NOT_FOUND, MsoException.ServiceException,
\r
1016 "Recipe does not exist in catalog DB",
\r
1017 ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, null);
\r
1018 msoRequest.createRequestRecord(Status.FAILED, action);
\r
1019 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
\r
1020 MsoLogger.ResponseCode.DataNotFound,
\r
1021 "No recipe found in DB");
\r
1022 msoLogger.debug(END_OF_THE_TRANSACTION
\r
1023 + (String) response.getEntity());
\r
1024 createOperationStatusRecordForError(action, requestId);
\r
1028 RequestClient requestClient = null;
\r
1029 HttpResponse response = null;
\r
1031 long subStartTime = System.currentTimeMillis();
\r
1032 // String sirRequestJson = mapReqJsonToSvcInstReq(e2eSir, requestJSON);
\r
1035 requestClient = RequestClientFactory.getRequestClient(
\r
1036 recipeLookupResult.getOrchestrationURI(),
\r
1037 MsoPropertiesUtils.loadMsoProperties());
\r
1039 JSONObject jjo = new JSONObject(requestJSON);
\r
1040 jjo.put("operationId", UUIDChecker.generateUUID(msoLogger));
\r
1042 String bpmnRequest = jjo.toString();
\r
1044 // Capture audit event
\r
1046 .debug("MSO API Handler Posting call to BPEL engine for url: "
\r
1047 + requestClient.getUrl());
\r
1048 String serviceId = instanceIdMap.get("serviceId");
\r
1049 String serviceInstanceType = e2eScaleReq.getService().getServiceType();
\r
1050 response = requestClient.post(requestId, false,
\r
1051 recipeLookupResult.getRecipeTimeout(), action.name(),
\r
1052 serviceId, null, null, null, null, null, serviceInstanceType,
\r
1053 null, null, null, bpmnRequest, recipeLookupResult.getRecipeParamXsd());
\r
1055 msoLogger.recordMetricEvent(subStartTime,
\r
1056 MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
\r
1057 "Successfully received response from BPMN engine", "BPMN",
\r
1058 recipeLookupResult.getOrchestrationURI(), null);
\r
1059 } catch (Exception e) {
\r
1060 msoLogger.recordMetricEvent(subStartTime,
\r
1061 MsoLogger.StatusCode.ERROR,
\r
1062 MsoLogger.ResponseCode.CommunicationError,
\r
1063 "Exception while communicate with BPMN engine", "BPMN",
\r
1064 recipeLookupResult.getOrchestrationURI(), null);
\r
1065 Response resp = msoRequest.buildServiceErrorResponse(
\r
1066 HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,
\r
1067 "Failed calling bpmn " + e.getMessage(),
\r
1068 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
\r
1069 alarmLogger.sendAlarm("MsoConfigurationError",
\r
1070 MsoAlarmLogger.CRITICAL,
\r
1071 Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_BPEL));
\r
1072 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,
\r
1073 MSO_PROP_APIHANDLER_INFRA, "", "",
\r
1074 MsoLogger.ErrorCode.AvailabilityError,
\r
1075 "Exception while communicate with BPMN engine");
\r
1076 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
\r
1077 MsoLogger.ResponseCode.CommunicationError,
\r
1078 "Exception while communicate with BPMN engine");
\r
1079 msoLogger.debug("End of the transaction, the final response is: "
\r
1080 + (String) resp.getEntity());
\r
1081 createOperationStatusRecordForError(action, requestId);
\r
1085 if (response == null) {
\r
1086 Response resp = msoRequest.buildServiceErrorResponse(
\r
1087 HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,
\r
1088 "bpelResponse is null",
\r
1089 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
\r
1090 msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,
\r
1091 MSO_PROP_APIHANDLER_INFRA, "", "",
\r
1092 MsoLogger.ErrorCode.BusinessProcesssError,
\r
1093 "Null response from BPEL");
\r
1094 msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
\r
1095 MsoLogger.ResponseCode.InternalError,
\r
1096 "Null response from BPMN");
\r
1097 msoLogger.debug(END_OF_THE_TRANSACTION + (String) resp.getEntity());
\r
1098 createOperationStatusRecordForError(action, requestId);
\r
1102 ResponseHandler respHandler = new ResponseHandler(response,
\r
1103 requestClient.getType());
\r
1104 int bpelStatus = respHandler.getStatus();
\r
1106 return beplStatusUpdate(requestId, startTime, msoRequest,
\r
1107 requestClient, respHandler, bpelStatus, action, instanceIdMap);
\r
1110 private void closeCatalogDB(CatalogDatabase db) {
\r
1116 private Response beplStatusUpdate(String requestId, long startTime,
\r
1117 MsoRequest msoRequest, RequestClient requestClient,
\r
1118 ResponseHandler respHandler, int bpelStatus, Action action,
\r
1119 HashMap<String, String> instanceIdMap) {
\r
1120 // BPMN accepted the request, the request is in progress
\r
1121 if (bpelStatus == HttpStatus.SC_ACCEPTED) {
\r
1122 String camundaJSONResponseBody = respHandler.getResponseBody();
\r
1123 msoLogger.debug("Received from Camunda: " + camundaJSONResponseBody);
\r
1125 // currently only for delete case we update the status here
\r
1126 if (action == Action.deleteInstance) {
\r
1127 ObjectMapper mapper = new ObjectMapper();
\r
1129 DelE2ESvcResp jo = mapper.readValue(
\r
1130 camundaJSONResponseBody, DelE2ESvcResp.class);
\r
1131 String operationId = jo.getOperationId();
\r
1132 this.createOperationStatusRecord("DELETE", requestId,
\r
1134 } catch (Exception ex) {
\r
1135 msoLogger.error(MessageEnum.APIH_BPEL_RESPONSE_ERROR,
\r
1136 requestClient.getUrl(), "", "",
\r
1137 MsoLogger.ErrorCode.BusinessProcesssError,
\r
1138 "Response from BPEL engine is failed with HTTP Status="
\r
1143 msoLogger.recordAuditEvent(startTime,
\r
1144 MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
\r
1145 "BPMN accepted the request, the request is in progress");
\r
1146 msoLogger.debug(END_OF_THE_TRANSACTION + camundaJSONResponseBody);
\r
1147 return Response.status(HttpStatus.SC_ACCEPTED)
\r
1148 .entity(camundaJSONResponseBody).build();
\r
1150 List<String> variables = new ArrayList<>();
\r
1151 variables.add(bpelStatus + "");
\r
1152 String camundaJSONResponseBody = respHandler.getResponseBody();
\r
1153 if (camundaJSONResponseBody != null
\r
1154 && !camundaJSONResponseBody.isEmpty()) {
\r
1155 Response resp = msoRequest.buildServiceErrorResponse(
\r
1156 bpelStatus, MsoException.ServiceException,
\r
1157 "Request Failed due to BPEL error with HTTP Status= %1 "
\r
1158 + '\n' + camundaJSONResponseBody,
\r
1159 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, variables);
\r
1160 msoLogger.error(MessageEnum.APIH_BPEL_RESPONSE_ERROR,
\r
1161 requestClient.getUrl(), "", "",
\r
1162 MsoLogger.ErrorCode.BusinessProcesssError,
\r
1163 "Response from BPEL engine is failed with HTTP Status="
\r
1165 msoLogger.recordAuditEvent(startTime,
\r
1166 MsoLogger.StatusCode.ERROR,
\r
1167 MsoLogger.ResponseCode.InternalError,
\r
1168 "Response from BPMN engine is failed");
\r
1169 msoLogger.debug(END_OF_THE_TRANSACTION
\r
1170 + (String) resp.getEntity());
\r
1173 Response resp = msoRequest
\r
1174 .buildServiceErrorResponse(
\r
1176 MsoException.ServiceException,
\r
1177 "Request Failed due to BPEL error with HTTP Status= %1",
\r
1178 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR,
\r
1180 msoLogger.error(MessageEnum.APIH_BPEL_RESPONSE_ERROR,
\r
1181 requestClient.getUrl(), "", "",
\r
1182 MsoLogger.ErrorCode.BusinessProcesssError,
\r
1183 "Response from BPEL engine is empty");
\r
1184 msoLogger.recordAuditEvent(startTime,
\r
1185 MsoLogger.StatusCode.ERROR,
\r
1186 MsoLogger.ResponseCode.InternalError,
\r
1187 "Response from BPEL engine is empty");
\r
1188 msoLogger.debug(END_OF_THE_TRANSACTION
\r
1189 + (String) resp.getEntity());
\r
1196 * Getting recipes from catalogDb
\r
1198 * @param db the catalog db
\r
1199 * @param serviceModelUUID the service model version uuid
\r
1200 * @param action the action for the service
\r
1201 * @return the service recipe result
\r
1203 private RecipeLookupResult getServiceInstanceOrchestrationURI(
\r
1204 CatalogDatabase db, String serviceModelUUID, Action action) {
\r
1206 RecipeLookupResult recipeLookupResult = getServiceURI(db, serviceModelUUID, action);
\r
1208 if (recipeLookupResult != null) {
\r
1209 msoLogger.debug("Orchestration URI is: "
\r
1210 + recipeLookupResult.getOrchestrationURI()
\r
1211 + ", recipe Timeout is: "
\r
1212 + Integer.toString(recipeLookupResult.getRecipeTimeout()));
\r
1214 msoLogger.debug("No matching recipe record found");
\r
1216 return recipeLookupResult;
\r
1220 * Getting recipes from catalogDb
\r
1221 * If Service recipe is not set, use default recipe, if set , use special recipe.
\r
1222 * @param db the catalog db
\r
1223 * @param serviceModelUUID the service version uuid
\r
1224 * @param action the action of the service.
\r
1225 * @return the service recipe result.
\r
1227 private RecipeLookupResult getServiceURI(CatalogDatabase db, String serviceModelUUID, Action action) {
\r
1229 String defaultServiceModelName = "UUI_DEFAULT";
\r
1231 Service defaultServiceRecord = db
\r
1232 .getServiceByModelName(defaultServiceModelName);
\r
1233 ServiceRecipe defaultRecipe = db.getServiceRecipeByModelUUID(
\r
1234 defaultServiceRecord.getModelUUID(), action.name());
\r
1235 //set recipe as default generic recipe
\r
1236 ServiceRecipe recipe = defaultRecipe;
\r
1237 //check the service special recipe
\r
1238 if(null != serviceModelUUID && ! serviceModelUUID.isEmpty()){
\r
1239 ServiceRecipe serviceSpecialRecipe = db.getServiceRecipeByModelUUID(
\r
1240 serviceModelUUID, action.name());
\r
1241 if(null != serviceSpecialRecipe){
\r
1242 //set service special recipe.
\r
1243 recipe = serviceSpecialRecipe;
\r
1247 if (recipe == null) {
\r
1250 return new RecipeLookupResult(recipe.getOrchestrationUri(),
\r
1251 recipe.getRecipeTimeout(), recipe.getServiceParamXSD());
\r
1256 * Converting E2EServiceInstanceRequest to ServiceInstanceRequest and
\r
1257 * passing it to camunda engine.
\r
1262 private String mapReqJsonToSvcInstReq(E2EServiceInstanceRequest e2eSir,
\r
1263 String requestJSON) {
\r
1265 sir = new ServiceInstancesRequest();
\r
1267 String returnString = null;
\r
1268 RequestDetails requestDetails = new RequestDetails();
\r
1269 ModelInfo modelInfo = new ModelInfo();
\r
1271 // ModelInvariantId
\r
1272 modelInfo.setModelInvariantId(e2eSir.getService().getServiceInvariantUuid());
\r
1274 // modelNameVersionId
\r
1275 modelInfo.setModelNameVersionId(e2eSir.getService().getServiceUuid());
\r
1277 // String modelInfoValue =
\r
1278 // e2eSir.getService().getParameters().getNodeTemplateName();
\r
1279 // String[] arrayOfInfo = modelInfoValue.split(":");
\r
1280 // String modelName = arrayOfInfo[0];
\r
1281 // String modelVersion = arrayOfInfo[1];
\r
1283 // TODO: To ensure, if we dont get the values from the UUI
\r
1284 String modelName = "voLTE";
\r
1285 String modelVersion = "1.0";
\r
1287 modelInfo.setModelName(modelName);
\r
1290 modelInfo.setModelVersion(modelVersion);
\r
1293 modelInfo.setModelType(ModelType.service);
\r
1295 // setting modelInfo to requestDetails
\r
1296 requestDetails.setModelInfo(modelInfo);
\r
1298 SubscriberInfo subscriberInfo = new SubscriberInfo();
\r
1300 // globalsubscriberId
\r
1301 subscriberInfo.setGlobalSubscriberId(e2eSir.getService().getGlobalSubscriberId());
\r
1303 // setting subscriberInfo to requestDetails
\r
1304 requestDetails.setSubscriberInfo(subscriberInfo);
\r
1306 RequestInfo requestInfo = new RequestInfo();
\r
1309 requestInfo.setInstanceName(e2eSir.getService().getName());
\r
1312 requestInfo.setSource("UUI");
\r
1314 // suppressRollback
\r
1315 requestInfo.setSuppressRollback(true);
\r
1317 // setting requestInfo to requestDetails
\r
1318 requestDetails.setRequestInfo(requestInfo);
\r
1320 RequestParameters requestParameters = new RequestParameters();
\r
1322 // subscriptionServiceType
\r
1323 requestParameters.setSubscriptionServiceType("MOG");
\r
1326 List<E2EUserParam> userParams;
\r
1328 // e2eSir.getService().getParameters().getRequestParameters().getUserParams();
\r
1329 List<Map<String, Object>> userParamList = new ArrayList<>();
\r
1330 Map<String, Object> userParamMap = new HashMap<>();
\r
1331 // complete json request updated in the camunda
\r
1332 userParamMap.put("UUIRequest", requestJSON);
\r
1333 userParamMap.put("ServiceInstanceName", e2eSir.getService().getName());
\r
1335 // Map<String, String> userParamMap3 = null;
\r
1336 // for (E2EUserParam userp : userParams) {
\r
1337 // userParamMap.put(userp.getName(), userp.getValue());
\r
1340 userParamList.add(userParamMap);
\r
1341 requestParameters.setUserParams(userParamList);
\r
1343 // setting requestParameters to requestDetails
\r
1344 requestDetails.setRequestParameters(requestParameters);
\r
1346 sir.setRequestDetails(requestDetails);
\r
1348 // converting to string
\r
1349 ObjectMapper mapper = new ObjectMapper();
\r
1351 returnString = mapper.writeValueAsString(sir);
\r
1352 } catch (IOException e) {
\r
1354 .debug("Exception while converting ServiceInstancesRequest object to string",
\r
1358 return returnString;
\r
1361 private void createOperationStatusRecordForError(Action action,
\r
1362 String requestId) throws MsoDatabaseException {
\r
1364 AbstractSessionFactoryManager requestsDbSessionFactoryManager = new RequestsDbSessionFactoryManager();
\r
1366 Session session = null;
\r
1369 session = requestsDbSessionFactoryManager.getSessionFactory()
\r
1371 session.beginTransaction();
\r
1373 OperationStatus os = new OperationStatus();
\r
1374 os.setOperation(action.name());
\r
1375 os.setOperationContent("");
\r
1376 os.setOperationId("");
\r
1377 os.setProgress("100");
\r
1379 os.setResult("error");
\r
1380 os.setServiceId(requestId);
\r
1382 Timestamp startTimeStamp = new Timestamp(System.currentTimeMillis());
\r
1383 Timestamp endTimeStamp = new Timestamp(System.currentTimeMillis());
\r
1384 os.setFinishedAt(endTimeStamp);
\r
1385 os.setOperateAt(startTimeStamp);
\r
1388 session.getTransaction().commit();
\r
1390 } catch (Exception e) {
\r
1391 msoLogger.error(MessageEnum.APIH_DB_INSERT_EXC, "", "",
\r
1392 MsoLogger.ErrorCode.DataError,
\r
1393 "Exception when creation record request in Operation", e);
\r
1394 throw new MsoDatabaseException(
\r
1395 "Data did inserted in Operatus Status Table for failure", e);
\r
1397 if (null != session) {
\r
1403 private void createOperationStatusRecord(String actionNm, String serviceId,
\r
1404 String operationId) throws MsoDatabaseException {
\r
1406 AbstractSessionFactoryManager requestsDbSessionFactoryManager = new RequestsDbSessionFactoryManager();
\r
1408 Session session = null;
\r
1411 session = requestsDbSessionFactoryManager.getSessionFactory()
\r
1413 session.beginTransaction();
\r
1415 OperationStatus os = new OperationStatus();
\r
1416 os.setOperation(actionNm);
\r
1417 os.setOperationContent("");
\r
1418 os.setOperationId(operationId);
\r
1419 os.setProgress("0");
\r
1421 os.setResult("processing");
\r
1422 os.setServiceId(serviceId);
\r
1423 // TODO : to be updated...
\r
1425 Timestamp startTimeStamp = new Timestamp(System.currentTimeMillis());
\r
1426 Timestamp endTimeStamp = new Timestamp(System.currentTimeMillis());
\r
1427 os.setFinishedAt(endTimeStamp);
\r
1428 os.setOperateAt(startTimeStamp);
\r
1431 session.getTransaction().commit();
\r
1433 } catch (Exception e) {
\r
1434 msoLogger.error(MessageEnum.APIH_DB_INSERT_EXC, "", "",
\r
1435 MsoLogger.ErrorCode.DataError,
\r
1436 "Exception when creation record request in Operation", e);
\r
1437 throw new MsoDatabaseException(
\r
1438 "Data did inserted in Operatus Status Table", e);
\r
1440 if (null != session) {
\r
1446 private OperationStatus chkSvcInstOperStatusbySvcId(String serviceId) {
\r
1447 OperationStatus svcInstanceOperStatus = (RequestsDatabase.getInstance())
\r
1448 .getOperationStatusByServiceId(serviceId);
\r
1450 return svcInstanceOperStatus;
\r
1453 private OperationStatus chkDuplicateServiceNameInOperStatus(
\r
1454 String serviceName) {
\r
1455 OperationStatus dupServiceName = (RequestsDatabase.getInstance())
\r
1456 .getOperationStatusByServiceName(serviceName);
\r
1458 return dupServiceName;
\r