2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Modifications Copyright (C) 2018 IBM.
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
23 package org.onap.so.adapters.requestsdb;
25 import java.sql.Timestamp;
27 import javax.jws.WebService;
28 import javax.transaction.Transactional;
30 import org.onap.so.adapters.requestsdb.exceptions.MsoRequestsDbException;
31 import org.onap.so.db.request.beans.InfraActiveRequests;
32 import org.onap.so.db.request.beans.OperationStatus;
33 import org.onap.so.db.request.beans.ResourceOperationStatus;
34 import org.onap.so.db.request.beans.ResourceOperationStatusId;
35 import org.onap.so.db.request.beans.SiteStatus;
36 import org.onap.so.db.request.data.repository.InfraActiveRequestsRepository;
37 import org.onap.so.db.request.data.repository.OperationStatusRepository;
38 import org.onap.so.db.request.data.repository.ResourceOperationStatusRepository;
39 import org.onap.so.db.request.data.repository.SiteStatusRepository;
40 import org.onap.so.logger.MessageEnum;
41 import org.onap.so.logger.MsoLogger;
42 import org.onap.so.requestsdb.RequestsDbConstant;
43 import org.onap.so.utils.UUIDChecker;
44 import org.springframework.beans.factory.annotation.Autowired;
45 import org.springframework.context.annotation.Primary;
46 import org.springframework.stereotype.Component;
48 @WebService(serviceName = "RequestsDbAdapter", endpointInterface = "org.onap.so.adapters.requestsdb.MsoRequestsDbAdapter", targetNamespace = "http://org.onap.so/requestsdb")
51 public class MsoRequestsDbAdapterImpl implements MsoRequestsDbAdapter {
53 private static final String SUCCESSFUL = "Successful";
55 private static final String GET_INFRA_REQUEST = "Get Infra request";
57 private static final String ERROR = "Error ";
59 private static MsoLogger logger = MsoLogger.getMsoLogger(MsoLogger.Catalog.RA, MsoRequestsDbAdapterImpl.class);
62 private InfraActiveRequestsRepository infraActive;
65 private SiteStatusRepository siteRepo;
68 private OperationStatusRepository operationStatusRepository;
71 private ResourceOperationStatusRepository resourceOperationStatusRepository;
75 public void updateInfraRequest(String requestId, String lastModifiedBy, String statusMessage, String responseBody,
76 RequestStatusType requestStatus, String progress, String vnfOutputs, String serviceInstanceId,
77 String networkId, String vnfId, String vfModuleId, String volumeGroupId, String serviceInstanceName,
78 String configurationId, String configurationName, String vfModuleName) throws MsoRequestsDbException {
79 MsoLogger.setLogContext(requestId, serviceInstanceId);
80 long startTime = System.currentTimeMillis();
82 InfraActiveRequests request = infraActive.findOneByRequestIdOrClientRequestId(requestId, requestId);
83 if (request == null) {
84 String error = "Entity not found. Unable to retrieve MSO Infra Requests DB for Request ID " + requestId;
85 throw new MsoRequestsDbException(error);
87 if (statusMessage != null) {
88 request.setStatusMessage(statusMessage);
90 if (responseBody != null) {
91 request.setResponseBody(responseBody);
93 if (requestStatus != null) {
94 request.setRequestStatus(requestStatus.toString());
96 if (progress != null) {
97 setProgress(progress, request);
99 if (vnfOutputs != null) {
100 request.setVnfOutputs(vnfOutputs);
102 if (serviceInstanceId != null) {
103 request.setServiceInstanceId(serviceInstanceId);
105 if (networkId != null) {
106 request.setNetworkId(networkId);
109 request.setVnfId(vnfId);
111 if (vfModuleId != null) {
112 request.setVfModuleId(vfModuleId);
114 if (volumeGroupId != null) {
115 request.setVolumeGroupId(volumeGroupId);
117 if (serviceInstanceName != null) {
118 request.setServiceInstanceName(serviceInstanceName);
120 if (vfModuleName != null) {
121 request.setVfModuleName(vfModuleName);
123 if (configurationId != null) {
124 request.setConfigurationId(configurationId);
126 if (configurationName != null) {
127 request.setConfigurationName(configurationName);
129 if (requestStatus == RequestStatusType.COMPLETE || requestStatus == RequestStatusType.FAILED) {
130 Timestamp nowTimeStamp = new Timestamp(System.currentTimeMillis());
131 request.setEndTime(nowTimeStamp);
133 request.setLastModifiedBy(lastModifiedBy);
134 infraActive.save(request);
136 } catch (Exception e) {
137 String error = "Error retrieving MSO Infra Requests DB for Request ID " + requestId;
138 logger.error(ERROR + MsoLogger.ErrorCode.BusinessProcesssError + " for " + GET_INFRA_REQUEST + " - " + MessageEnum.RA_DB_REQUEST_NOT_EXIST + " - " + error, e);
139 logger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, error);
140 throw new MsoRequestsDbException(error, e);
142 logger.recordAuditEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, SUCCESSFUL);
146 private void setProgress(String progress, InfraActiveRequests request) {
148 request.setProgress(Long.parseLong(progress));
149 } catch (NumberFormatException e) {
150 logger.warnSimple("UpdateInfraRequest", "Invalid value sent for progress");
156 public InfraActiveRequests getInfraRequest(String requestId) throws MsoRequestsDbException {
157 long startTime = System.currentTimeMillis();
158 MsoLogger.setLogContext(requestId, null);
160 logger.debug("Call to MSO Infra RequestsDb adapter get method with request Id: " + requestId);
162 InfraActiveRequests request = null;
165 request = infraActive.findOneByRequestIdOrClientRequestId(requestId, requestId);
166 if (request == null) {
167 String error = "Entity not found. Unable to retrieve MSO Infra Requests DB for Request ID " + requestId;
168 throw new MsoRequestsDbException(error);
170 } catch (Exception e) {
171 String error = "Error retrieving MSO Infra Requests DB for Request ID " + requestId;
172 logger.error(ERROR + MsoLogger.ErrorCode.BusinessProcesssError + " for " + GET_INFRA_REQUEST + " - " + MessageEnum.RA_DB_REQUEST_NOT_EXIST + " - " + error, e);
173 logger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, error);
174 throw new MsoRequestsDbException(error, e);
176 logger.recordAuditEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, SUCCESSFUL);
181 * Get SiteStatus by SiteName.
184 * The unique name of the site
185 * @return Status of that site
189 public boolean getSiteStatus(String siteName) {
190 UUIDChecker.generateUUID(logger);
191 long startTime = System.currentTimeMillis();
192 SiteStatus siteStatus;
193 logger.debug("Request database - get Site Status with Site name:" + siteName);
195 siteStatus = siteRepo.findOneBySiteName(siteName);
196 if (siteStatus == null) {
197 // if not exist in DB, it means the site is not disabled, thus
199 logger.recordAuditEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, SUCCESSFUL);
202 logger.recordAuditEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, SUCCESSFUL);
203 return siteStatus.getStatus();
208 * update operation status <br>
212 * @param operationType
215 * @param operationContent
218 * @throws MsoRequestsDbException
219 * @since ONAP Amsterdam Release
223 public void updateServiceOperationStatus(String serviceId, String operationId, String operationType, String userId,
224 String result, String operationContent, String progress, String reason) throws MsoRequestsDbException {
225 OperationStatus operStatus = operationStatusRepository.findOneByServiceIdAndOperationId(serviceId, operationId);
226 if (operStatus == null) {
227 String error = "Entity not found. Unable to retrieve OperationStatus Object ServiceId: " + serviceId + " operationId: "
229 MsoRequestsDbException e = new MsoRequestsDbException(error);
230 logger.error(ERROR+ MsoLogger.ErrorCode.BusinessProcesssError + " - " + MessageEnum.RA_DB_REQUEST_NOT_EXIST + " - " + error, e);
234 operStatus.setUserId(userId);
235 operStatus.setOperation(operationType);
236 operStatus.setReason(reason);
237 operStatus.setProgress(progress);
238 operStatus.setResult(result);
239 operStatus.setOperationContent(operationContent);
240 operStatus.setResult(result);
241 operationStatusRepository.save(operStatus);
245 * init the operation status of all the resources <br>
251 * @param operationType
253 * @param resourceTemplateUUIDs
254 * the resources, the UUID is split by ":"
255 * @throws MsoRequestsDbException
256 * @since ONAP Amsterdam Release
260 public void initResourceOperationStatus(String serviceId, String operationId, String operationType,
261 String resourceTemplateUUIDs) throws MsoRequestsDbException {
262 String[] resourceLst = resourceTemplateUUIDs.split(":");
263 for (String resource : resourceLst) {
264 if ("".equals(resource)) {
267 ResourceOperationStatus resourceStatus = new ResourceOperationStatus();
268 resourceStatus.setOperationId(operationId);
269 resourceStatus.setServiceId(serviceId);
270 resourceStatus.setResourceTemplateUUID(resource);
271 resourceStatus.setOperType(operationType);
272 resourceStatus.setStatus(RequestsDbConstant.Status.PROCESSING);
273 resourceStatus.setStatusDescription("Waiting for start");
274 resourceOperationStatusRepository.save(resourceStatus);
280 * get resource operation status <br>
284 * @param resourceTemplateUUID
286 * @throws MsoRequestsDbException
287 * @since ONAP Amsterdam Release
290 public ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId,
291 String resourceTemplateUUID) throws MsoRequestsDbException {
293 return resourceOperationStatusRepository
294 .findOne(new ResourceOperationStatusId(serviceId, operationId, resourceTemplateUUID));
298 * update resource operation status <br>
302 * @param resourceTemplateUUID
303 * @param operationType
304 * @param resourceInstanceID
309 * @param statusDescription
310 * @throws MsoRequestsDbException
311 * @since ONAP Amsterdam Release
314 public void updateResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID,
315 String operationType, String resourceInstanceID, String jobId, String status, String progress,
316 String errorCode, String statusDescription) throws MsoRequestsDbException {
317 ResourceOperationStatus resStatus = new ResourceOperationStatus();
318 resStatus.setServiceId(serviceId);
319 resStatus.setOperationId(operationId);
320 resStatus.setResourceTemplateUUID(resourceTemplateUUID);
321 resStatus.setOperType(operationType);
322 resStatus.setResourceInstanceID(resourceInstanceID);
323 resStatus.setJobId(jobId);
324 resStatus.setStatus(status);
325 resStatus.setProgress(progress);
326 resStatus.setErrorCode(errorCode);
327 resStatus.setStatusDescription(statusDescription);
328 resourceOperationStatusRepository.save(resStatus);