2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. 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=========================================================
20 package org.openecomp.mso.apihandlerinfra;
22 import java.text.SimpleDateFormat;
23 import java.util.ArrayList;
24 import java.util.List;
28 import javax.ws.rs.core.Context;
29 import javax.ws.rs.core.MediaType;
30 import javax.ws.rs.core.MultivaluedMap;
31 import javax.ws.rs.core.Response;
32 import javax.ws.rs.core.UriInfo;
34 import org.apache.http.HttpStatus;
35 import org.codehaus.jackson.map.ObjectMapper;
37 import org.openecomp.mso.apihandler.common.ErrorNumbers;
38 import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.*;
39 import org.openecomp.mso.logger.MessageEnum;
40 import org.openecomp.mso.logger.MsoAlarmLogger;
41 import org.openecomp.mso.logger.MsoLogger;
42 import org.openecomp.mso.requestsdb.InfraActiveRequests;
43 import org.openecomp.mso.requestsdb.RequestsDatabase;
46 public class OrchestrationRequests {
48 public final static String MSO_PROP_APIHANDLER_INFRA = "MSO_PROP_APIHANDLER_INFRA";
50 private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.APIH);
52 private static MsoAlarmLogger alarmLogger = new MsoAlarmLogger ();
57 public OrchestrationRequests() {
58 // TODO Auto-generated constructor stub
62 @Path("/orchestrationRequests/{version:[vV][2-3]}/{requestId}")
63 @Produces(MediaType.APPLICATION_JSON)
64 public Response getOrchestrationRequest(@PathParam("requestId") String requestId) {
66 GetOrchestrationResponse orchestrationResponse = new GetOrchestrationResponse();
68 MsoRequest msoRequest = new MsoRequest (requestId);
70 long startTime = System.currentTimeMillis ();
72 InfraActiveRequests requestDB = null;
75 requestDB = RequestsDatabase.getRequestFromInfraActive(requestId);
77 } catch (Exception e) {
78 msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.AvailabilityError, "Exception while communciate with Request DB - Infra Request Lookup", e);
79 msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
80 Response response = msoRequest.buildServiceErrorResponse (HttpStatus.SC_NOT_FOUND,
81 MsoException.ServiceException,
83 ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB,
85 alarmLogger.sendAlarm ("MsoDatabaseAccessError",
86 MsoAlarmLogger.CRITICAL,
87 Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB));
88 msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while communciate with Request DB");
89 msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ());
94 if(requestDB == null) {
95 Response resp = msoRequest.buildServiceErrorResponse (HttpStatus.SC_NO_CONTENT,
96 MsoException.ServiceException,
97 "Orchestration RequestId " + requestId + " is not found in DB",
98 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR,
100 msoLogger.error (MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Null response from RequestDB when searching by RequestId");
101 msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, "Null response from RequestDB when searching by RequestId");
102 msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ());
107 Request request = mapInfraActiveRequestToRequest(requestDB);
109 orchestrationResponse.setRequest(request);
111 return Response.status(200).entity(orchestrationResponse).build();
115 @Path("/orchestrationRequests/{version:[vV][2-3]}")
116 @Produces(MediaType.APPLICATION_JSON)
117 public Response getOrchestrationRequest(@Context UriInfo ui) {
119 long startTime = System.currentTimeMillis ();
121 MsoRequest msoRequest = new MsoRequest();
123 MultivaluedMap<String, String> queryParams = ui.getQueryParameters();
125 List<InfraActiveRequests> activeRequests = null;
127 GetOrchestrationListResponse orchestrationList = null;
132 Map<String, List<String>> orchestrationMap = msoRequest.getOrchestrationFilters(queryParams);
134 activeRequests = RequestsDatabase.getOrchestrationFiltersFromInfraActive(orchestrationMap);
136 orchestrationList = new GetOrchestrationListResponse();
138 List<RequestList> requestLists = new ArrayList<RequestList>();
140 for(InfraActiveRequests infraActive : activeRequests){
142 Request request = mapInfraActiveRequestToRequest(infraActive);
143 RequestList requestList = new RequestList();
144 requestList.setRequest(request);
146 requestLists.add(requestList);
150 orchestrationList.setRequestList(requestLists);
153 msoLogger.debug ("Get Orchestration Request with Filters Failed : ", e);
154 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_INTERNAL_SERVER_ERROR, MsoException.ServiceException,
155 "Get Orchestration Request with Filters Failed. " + e.getMessage(),
156 ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, null);
157 msoLogger.error (MessageEnum.APIH_GENERAL_EXCEPTION, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Get Orchestration Request with Filters Failed : " + e);
158 msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataError, "Get Orchestration Request with Filters Failed");
159 msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ());
164 return Response.status(200).entity(orchestrationList).build();
169 @Path("/orchestrationRequests/v3/{requestId}/unlock")
170 @Consumes(MediaType.APPLICATION_JSON)
171 @Produces(MediaType.APPLICATION_JSON)
172 public Response unlockOrchestrationRequest(String requestJSON, @PathParam("requestId") String requestId) {
174 MsoRequest msoRequest = new MsoRequest (requestId);
176 long startTime = System.currentTimeMillis ();
177 msoLogger.debug ("requestId is: " + requestId);
179 InfraActiveRequests requestDB = null;
180 Request request = null;
182 msoLogger.debug ("requestId is: " + requestId);
183 ServiceInstancesRequest sir = null;
186 ObjectMapper mapper = new ObjectMapper();
187 sir = mapper.readValue(requestJSON, ServiceInstancesRequest.class);
189 } catch(Exception e){
190 msoLogger.debug ("Mapping of request to JSON object failed : ", e);
191 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST, MsoException.ServiceException,
192 "Mapping of request to JSON object failed. " + e.getMessage(),
193 ErrorNumbers.SVC_BAD_PARAMETER, null);
194 if (msoRequest.getRequestId () != null) {
195 msoLogger.debug ("Mapping of request to JSON object failed");
197 msoLogger.error (MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.SchemaError, requestJSON, e);
198 msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError, "Mapping of request to JSON object failed");
199 msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ());
205 msoRequest.parseOrchestration(sir);
206 } catch (Exception e) {
207 msoLogger.debug ("Validation failed: ", e);
208 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST, MsoException.ServiceException,
209 "Error parsing request. " + e.getMessage(),
210 ErrorNumbers.SVC_BAD_PARAMETER, null);
211 if (msoRequest.getRequestId () != null) {
212 msoLogger.debug ("Logging failed message to the database");
214 msoLogger.error (MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.SchemaError, requestJSON, e);
215 msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError, "Validation of the input request failed");
216 msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ());
221 requestDB = RequestsDatabase.getRequestFromInfraActive(requestId);
223 if(requestDB == null) {
224 Response resp = msoRequest.buildServiceErrorResponse (HttpStatus.SC_NOT_FOUND,
225 MsoException.ServiceException,
226 "Orchestration RequestId " + requestId + " is not found in DB",
227 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR,
229 msoLogger.error (MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Null response from RequestDB when searching by RequestId");
230 msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, "Null response from RequestDB when searching by RequestId");
231 msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ());
235 request = mapInfraActiveRequestToRequest(requestDB);
236 RequestStatus reqStatus = request.getRequestStatus();
237 Status status = Status.valueOf(reqStatus.getRequestState());
238 if(status == Status.IN_PROGRESS || status == Status.PENDING){
239 msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.UNLOCKED);
240 reqStatus.setRequestState(Status.UNLOCKED.toString ());
241 RequestsDatabase.updateInfraStatus (requestId,
242 Status.UNLOCKED.toString (),
243 Constants.MODIFIED_BY_APIHANDLER);
245 msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "RequestId " + requestId + " has been unlocked");
248 Response resp = msoRequest.buildServiceErrorResponse (HttpStatus.SC_BAD_REQUEST,
249 MsoException.ServiceException,
250 "Orchestration RequestId " + requestId + " has a status of " + status + " and can not be unlocked",
251 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR,
253 msoLogger.error (MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.DataError, "Orchestration RequestId " + requestId + " has a status of " + status + " and can not be unlocked");
254 msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataError, "Orchestration RequestId " + requestId + " has a status of " + status + " and can not be unlocked");
255 msoLogger.debug ("End of the transaction, the final response is: " + (String) resp.getEntity ());
259 } catch (Exception e) {
260 msoLogger.error (MessageEnum.APIH_DB_ACCESS_EXC, MSO_PROP_APIHANDLER_INFRA, "", "", MsoLogger.ErrorCode.AvailabilityError, "Exception while communciate with Request DB - Infra Request Lookup", e);
261 msoRequest.setStatus (org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
262 Response response = msoRequest.buildServiceErrorResponse (HttpStatus.SC_NOT_FOUND,
263 MsoException.ServiceException,
265 ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB,
267 alarmLogger.sendAlarm ("MsoDatabaseAccessError",
268 MsoAlarmLogger.CRITICAL,
269 Messages.errors.get (ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB));
270 msoLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, "Exception while communciate with Request DB");
271 msoLogger.debug ("End of the transaction, the final response is: " + (String) response.getEntity ());
276 return Response.status (HttpStatus.SC_NO_CONTENT).entity ("").build ();
279 private Request mapInfraActiveRequestToRequest(InfraActiveRequests requestDB) {
282 Request request = new Request();
284 ObjectMapper mapper = new ObjectMapper();
285 // mapper.configure(Feature.WRAP_ROOT_VALUE, true);
287 request.setRequestId(requestDB.getRequestId());
288 request.setRequestScope(requestDB.getRequestScope());
289 request.setRequestType(requestDB.getRequestAction());
291 InstanceReferences ir = new InstanceReferences();
292 if(requestDB.getNetworkId() != null)
293 ir.setNetworkInstanceId(requestDB.getNetworkId());
294 if(requestDB.getNetworkName() != null)
295 ir.setNetworkInstanceName(requestDB.getNetworkName());
296 if(requestDB.getServiceInstanceId() != null)
297 ir.setServiceInstanceId(requestDB.getServiceInstanceId());
298 if(requestDB.getServiceInstanceName() != null)
299 ir.setServiceInstanceName(requestDB.getServiceInstanceName());
300 if(requestDB.getVfModuleId() != null)
301 ir.setVfModuleInstanceId(requestDB.getVfModuleId());
302 if(requestDB.getVfModuleName() != null)
303 ir.setVfModuleInstanceName(requestDB.getVfModuleName());
304 if(requestDB.getVnfId() != null)
305 ir.setVnfInstanceId(requestDB.getVnfId());
306 if(requestDB.getVnfName() != null)
307 ir.setVnfInstanceName(requestDB.getVnfName());
308 if(requestDB.getVolumeGroupId() != null)
309 ir.setVolumeGroupInstanceId(requestDB.getVolumeGroupId());
310 if(requestDB.getVolumeGroupName() != null)
311 ir.setVolumeGroupInstanceName(requestDB.getVolumeGroupName());
312 if(requestDB.getRequestorId() != null)
313 ir.setRequestorId(requestDB.getRequestorId());
316 request.setInstanceReferences(ir);
318 String requestBody = requestDB.getRequestBody();
320 RequestDetails requestDetails = null;
323 requestDetails = mapper.readValue(requestBody, RequestDetails.class);
326 msoLogger.debug("Exception caught mapping requestBody to RequestDetails");
329 request.setRequestDetails(requestDetails);
330 String startTimeStamp = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss").format(requestDB.getStartTime()) + " GMT";
331 request.setStartTime(startTimeStamp);
333 RequestStatus status = new RequestStatus();
334 if(requestDB.getStatusMessage() != null){
335 status.setStatusMessage(requestDB.getStatusMessage());
338 if(requestDB.getEndTime() != null){
339 String endTimeStamp = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss").format(requestDB.getEndTime()) + " GMT";
340 status.setFinishTime(endTimeStamp);
344 if(requestDB.getRequestStatus() != null){
345 status.setRequestState(requestDB.getRequestStatus());
348 if(requestDB.getProgress() != null){
349 status.setPercentProgress(requestDB.getProgress().intValue());
352 request.setRequestStatus(status);