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=========================================================
21 package org.onap.so.adapters.requestsdb;
23 import java.sql.Timestamp;
25 import javax.jws.WebService;
26 import javax.transaction.Transactional;
28 import org.onap.so.adapters.requestsdb.exceptions.MsoRequestsDbException;
29 import org.onap.so.db.request.beans.InfraActiveRequests;
30 import org.onap.so.db.request.beans.OperationStatus;
31 import org.onap.so.db.request.beans.ResourceOperationStatus;
32 import org.onap.so.db.request.beans.ResourceOperationStatusId;
33 import org.onap.so.db.request.beans.SiteStatus;
34 import org.onap.so.db.request.data.repository.InfraActiveRequestsRepository;
35 import org.onap.so.db.request.data.repository.OperationStatusRepository;
36 import org.onap.so.db.request.data.repository.ResourceOperationStatusRepository;
37 import org.onap.so.db.request.data.repository.SiteStatusRepository;
38 import org.onap.so.logger.MessageEnum;
39 import org.onap.so.logger.MsoLogger;
40 import org.onap.so.requestsdb.RequestsDbConstant;
41 import org.onap.so.utils.UUIDChecker;
42 import org.springframework.beans.factory.annotation.Autowired;
43 import org.springframework.context.annotation.Primary;
44 import org.springframework.stereotype.Component;
46 @WebService(serviceName = "RequestsDbAdapter", endpointInterface = "org.onap.so.adapters.requestsdb.MsoRequestsDbAdapter", targetNamespace = "http://org.onap.so/requestsdb")
49 public class MsoRequestsDbAdapterImpl implements MsoRequestsDbAdapter {
51 private static final String SUCCESSFUL = "Successful";
53 private static final String GET_INFRA_REQUEST = "Get Infra request";
55 private static MsoLogger logger = MsoLogger.getMsoLogger(MsoLogger.Catalog.RA, MsoRequestsDbAdapterImpl.class);
58 private InfraActiveRequestsRepository infraActive;
61 private SiteStatusRepository siteRepo;
64 private OperationStatusRepository operationStatusRepository;
67 private ResourceOperationStatusRepository resourceOperationStatusRepository;
71 public void updateInfraRequest(String requestId, String lastModifiedBy, String statusMessage, String responseBody,
72 RequestStatusType requestStatus, String progress, String vnfOutputs, String serviceInstanceId,
73 String networkId, String vnfId, String vfModuleId, String volumeGroupId, String serviceInstanceName,
74 String configurationId, String configurationName, String vfModuleName) throws MsoRequestsDbException {
75 MsoLogger.setLogContext(requestId, serviceInstanceId);
76 long startTime = System.currentTimeMillis();
78 InfraActiveRequests request = infraActive.findOneByRequestIdOrClientRequestId(requestId, requestId);
79 if (request == null) {
80 String error = "Entity not found. Unable to retrieve MSO Infra Requests DB for Request ID " + requestId;
81 throw new MsoRequestsDbException(error);
83 if (statusMessage != null) {
84 request.setStatusMessage(statusMessage);
86 if (responseBody != null) {
87 request.setResponseBody(responseBody);
89 if (requestStatus != null) {
90 request.setRequestStatus(requestStatus.toString());
92 if (progress != null) {
93 setProgress(progress, request);
95 if (vnfOutputs != null) {
96 request.setVnfOutputs(vnfOutputs);
98 if (serviceInstanceId != null) {
99 request.setServiceInstanceId(serviceInstanceId);
101 if (networkId != null) {
102 request.setNetworkId(networkId);
105 request.setVnfId(vnfId);
107 if (vfModuleId != null) {
108 request.setVfModuleId(vfModuleId);
110 if (volumeGroupId != null) {
111 request.setVolumeGroupId(volumeGroupId);
113 if (serviceInstanceName != null) {
114 request.setServiceInstanceName(serviceInstanceName);
116 if (vfModuleName != null) {
117 request.setVfModuleName(vfModuleName);
119 if (configurationId != null) {
120 request.setConfigurationId(configurationId);
122 if (configurationName != null) {
123 request.setConfigurationName(configurationName);
125 if (requestStatus == RequestStatusType.COMPLETE || requestStatus == RequestStatusType.FAILED) {
126 Timestamp nowTimeStamp = new Timestamp(System.currentTimeMillis());
127 request.setEndTime(nowTimeStamp);
129 request.setLastModifiedBy(lastModifiedBy);
130 infraActive.save(request);
132 } catch (Exception e) {
133 String error = "Error retrieving MSO Infra Requests DB for Request ID " + requestId;
134 logger.error("Error " + MsoLogger.ErrorCode.BusinessProcesssError + " for " + GET_INFRA_REQUEST + " - " + MessageEnum.RA_DB_REQUEST_NOT_EXIST + " - " + error, e);
135 logger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, error);
136 throw new MsoRequestsDbException(error, e);
138 logger.recordAuditEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, SUCCESSFUL);
142 private void setProgress(String progress, InfraActiveRequests request) {
144 request.setProgress(Long.parseLong(progress));
145 } catch (NumberFormatException e) {
146 logger.warnSimple("UpdateInfraRequest", "Invalid value sent for progress");
152 public InfraActiveRequests getInfraRequest(String requestId) throws MsoRequestsDbException {
153 long startTime = System.currentTimeMillis();
154 MsoLogger.setLogContext(requestId, null);
156 logger.debug("Call to MSO Infra RequestsDb adapter get method with request Id: " + requestId);
158 InfraActiveRequests request = null;
161 request = infraActive.findOneByRequestIdOrClientRequestId(requestId, requestId);
162 if (request == null) {
163 String error = "Entity not found. Unable to retrieve MSO Infra Requests DB for Request ID " + requestId;
164 throw new MsoRequestsDbException(error);
166 } catch (Exception e) {
167 String error = "Error retrieving MSO Infra Requests DB for Request ID " + requestId;
168 logger.error("Error " + MsoLogger.ErrorCode.BusinessProcesssError + " for " + GET_INFRA_REQUEST + " - " + MessageEnum.RA_DB_REQUEST_NOT_EXIST + " - " + error, e);
169 logger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, error);
170 throw new MsoRequestsDbException(error, e);
172 logger.recordAuditEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, SUCCESSFUL);
177 * Get SiteStatus by SiteName.
180 * The unique name of the site
181 * @return Status of that site
185 public boolean getSiteStatus(String siteName) {
186 UUIDChecker.generateUUID(logger);
187 long startTime = System.currentTimeMillis();
188 SiteStatus siteStatus;
189 logger.debug("Request database - get Site Status with Site name:" + siteName);
191 siteStatus = siteRepo.findOneBySiteName(siteName);
192 if (siteStatus == null) {
193 // if not exist in DB, it means the site is not disabled, thus
195 logger.recordAuditEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, SUCCESSFUL);
198 logger.recordAuditEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, SUCCESSFUL);
199 return siteStatus.getStatus();
204 * update operation status <br>
208 * @param operationType
211 * @param operationContent
214 * @throws MsoRequestsDbException
215 * @since ONAP Amsterdam Release
219 public void updateServiceOperationStatus(String serviceId, String operationId, String operationType, String userId,
220 String result, String operationContent, String progress, String reason) throws MsoRequestsDbException {
221 OperationStatus operStatus = operationStatusRepository.findOneByServiceIdAndOperationId(serviceId, operationId);
222 if (operStatus == null) {
223 String error = "Entity not found. Unable to retrieve OperationStatus Object ServiceId: " + serviceId + " operationId: "
225 MsoRequestsDbException e = new MsoRequestsDbException(error);
226 logger.error("Error "+ MsoLogger.ErrorCode.BusinessProcesssError + " - " + MessageEnum.RA_DB_REQUEST_NOT_EXIST + " - " + error, e);
230 operStatus.setUserId(userId);
231 operStatus.setOperation(operationType);
232 operStatus.setReason(reason);
233 operStatus.setProgress(progress);
234 operStatus.setResult(result);
235 operStatus.setOperationContent(operationContent);
236 operStatus.setResult(result);
237 operationStatusRepository.save(operStatus);
241 * init the operation status of all the resources <br>
247 * @param operationType
249 * @param resourceTemplateUUIDs
250 * the resources, the UUID is split by ":"
251 * @throws MsoRequestsDbException
252 * @since ONAP Amsterdam Release
256 public void initResourceOperationStatus(String serviceId, String operationId, String operationType,
257 String resourceTemplateUUIDs) throws MsoRequestsDbException {
258 String[] resourceLst = resourceTemplateUUIDs.split(":");
259 for (String resource : resourceLst) {
260 if ("".equals(resource)) {
263 ResourceOperationStatus resourceStatus = new ResourceOperationStatus();
264 resourceStatus.setOperationId(operationId);
265 resourceStatus.setServiceId(serviceId);
266 resourceStatus.setResourceTemplateUUID(resource);
267 resourceStatus.setOperType(operationType);
268 resourceStatus.setStatus(RequestsDbConstant.Status.PROCESSING);
269 resourceStatus.setStatusDescription("Waiting for start");
270 resourceOperationStatusRepository.save(resourceStatus);
276 * get resource operation status <br>
280 * @param resourceTemplateUUID
282 * @throws MsoRequestsDbException
283 * @since ONAP Amsterdam Release
286 public ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId,
287 String resourceTemplateUUID) throws MsoRequestsDbException {
289 return resourceOperationStatusRepository
290 .findOne(new ResourceOperationStatusId(serviceId, operationId, resourceTemplateUUID));
294 * update resource operation status <br>
298 * @param resourceTemplateUUID
299 * @param operationType
300 * @param resourceInstanceID
305 * @param statusDescription
306 * @throws MsoRequestsDbException
307 * @since ONAP Amsterdam Release
310 public void updateResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID,
311 String operationType, String resourceInstanceID, String jobId, String status, String progress,
312 String errorCode, String statusDescription) throws MsoRequestsDbException {
313 ResourceOperationStatus resStatus = new ResourceOperationStatus();
314 resStatus.setServiceId(serviceId);
315 resStatus.setOperationId(operationId);
316 resStatus.setResourceTemplateUUID(resourceTemplateUUID);
317 resStatus.setOperType(operationType);
318 resStatus.setResourceInstanceID(resourceInstanceID);
319 resStatus.setJobId(jobId);
320 resStatus.setStatus(status);
321 resStatus.setProgress(progress);
322 resStatus.setErrorCode(errorCode);
323 resStatus.setStatusDescription(statusDescription);
324 resourceOperationStatusRepository.save(resStatus);