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;
26 import java.util.List;
28 import javax.jws.WebService;
29 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.MsoLogger;
41 import org.onap.so.requestsdb.RequestsDbConstant;
42 import org.onap.so.utils.UUIDChecker;
43 import org.springframework.beans.factory.annotation.Autowired;
44 import org.springframework.context.annotation.Primary;
45 import org.springframework.stereotype.Component;
47 @WebService(serviceName = "RequestsDbAdapter", endpointInterface = "org.onap.so.adapters.requestsdb.MsoRequestsDbAdapter", targetNamespace = "http://org.onap.so/requestsdb")
50 public class MsoRequestsDbAdapterImpl implements MsoRequestsDbAdapter {
52 private static MsoLogger logger = MsoLogger.getMsoLogger(MsoLogger.Catalog.RA, MsoRequestsDbAdapterImpl.class);
55 private InfraActiveRequestsRepository infraActive;
58 private SiteStatusRepository siteRepo;
61 private OperationStatusRepository operationStatusRepository;
64 private ResourceOperationStatusRepository resourceOperationStatusRepository;
68 public void updateInfraRequest(String requestId, String lastModifiedBy, String statusMessage, String responseBody,
69 RequestStatusType requestStatus, String progress, String vnfOutputs, String serviceInstanceId,
70 String networkId, String vnfId, String vfModuleId, String volumeGroupId, String serviceInstanceName,
71 String configurationId, String configurationName, String vfModuleName) throws MsoRequestsDbException {
73 InfraActiveRequests request = infraActive.findOneByRequestIdOrClientRequestId(requestId, requestId);
74 if (request == null) {
75 String error = "Entity not found. Unable to retrieve MSO Infra Requests DB for Request ID " + requestId;
76 throw new MsoRequestsDbException(error);
78 if (statusMessage != null) {
79 request.setStatusMessage(statusMessage);
81 if (responseBody != null) {
82 request.setResponseBody(responseBody);
84 if (requestStatus != null) {
85 request.setRequestStatus(requestStatus.toString());
87 if (progress != null) {
88 setProgress(progress, request);
90 if (vnfOutputs != null) {
91 request.setVnfOutputs(vnfOutputs);
93 if (serviceInstanceId != null) {
94 request.setServiceInstanceId(serviceInstanceId);
96 if (networkId != null) {
97 request.setNetworkId(networkId);
100 request.setVnfId(vnfId);
102 if (vfModuleId != null) {
103 request.setVfModuleId(vfModuleId);
105 if (volumeGroupId != null) {
106 request.setVolumeGroupId(volumeGroupId);
108 if (serviceInstanceName != null) {
109 request.setServiceInstanceName(serviceInstanceName);
111 if (vfModuleName != null) {
112 request.setVfModuleName(vfModuleName);
114 if (configurationId != null) {
115 request.setConfigurationId(configurationId);
117 if (configurationName != null) {
118 request.setConfigurationName(configurationName);
120 if (requestStatus == RequestStatusType.COMPLETE || requestStatus == RequestStatusType.FAILED) {
121 Timestamp nowTimeStamp = new Timestamp(System.currentTimeMillis());
122 request.setEndTime(nowTimeStamp);
124 request.setLastModifiedBy(lastModifiedBy);
125 infraActive.save(request);
126 } catch (Exception e) {
127 String error = "Error retrieving MSO Infra Requests DB for Request ID " + requestId;
128 logger.error(error, e);
129 throw new MsoRequestsDbException(error, MsoLogger.ErrorCode.BusinessProcesssError, e);
133 private void setProgress(String progress, InfraActiveRequests request) {
135 request.setProgress(Long.parseLong(progress));
136 } catch (NumberFormatException e) {
137 logger.warnSimple("UpdateInfraRequest", "Invalid value sent for progress");
143 public InfraActiveRequests getInfraRequest(String requestId) throws MsoRequestsDbException {
144 logger.debug("Call to MSO Infra RequestsDb adapter get method with request Id: " + requestId);
145 InfraActiveRequests request = null;
147 request = infraActive.findOneByRequestIdOrClientRequestId(requestId, requestId);
148 if (request == null) {
149 String error = "Entity not found. Unable to retrieve MSO Infra Requests DB for Request ID " + requestId;
150 throw new MsoRequestsDbException(error);
152 } catch (Exception e) {
153 String error = "Error retrieving MSO Infra Requests DB for Request ID " + requestId;
154 logger.error(error,e);
155 throw new MsoRequestsDbException(error,MsoLogger.ErrorCode.BusinessProcesssError , e);
161 * Get SiteStatus by SiteName.
164 * The unique name of the site
165 * @return Status of that site
169 public boolean getSiteStatus(String siteName) {
170 UUIDChecker.generateUUID(logger);
171 SiteStatus siteStatus;
172 logger.debug("Request database - get Site Status with Site name:" + siteName);
173 siteStatus = siteRepo.findOneBySiteName(siteName);
174 if (siteStatus == null) {
175 // if not exist in DB, it means the site is not disabled, thus
179 return siteStatus.getStatus();
184 * update operation status <br>
188 * @param operationType
191 * @param operationContent
194 * @throws MsoRequestsDbException
195 * @since ONAP Amsterdam Release
199 public void updateServiceOperationStatus(String serviceId, String operationId, String operationType, String userId,
200 String result, String operationContent, String progress, String reason) throws MsoRequestsDbException {
201 OperationStatus operStatus = operationStatusRepository.findOneByServiceIdAndOperationId(serviceId, operationId);
202 if (operStatus == null) {
203 String error = "Entity not found. Unable to retrieve OperationStatus Object ServiceId: " + serviceId + " operationId: "
206 // throw new MsoRequestsDbException(error,MsoLogger.ErrorCode.BusinessProcesssError);
207 operStatus = new OperationStatus();
208 operStatus.setOperationId(operationId);
209 operStatus.setServiceId(serviceId);
212 operStatus.setUserId(userId);
213 operStatus.setOperation(operationType);
214 operStatus.setReason(reason);
215 operStatus.setProgress(progress);
216 operStatus.setResult(result);
217 operStatus.setOperationContent(operationContent);
218 operStatus.setResult(result);
219 operationStatusRepository.save(operStatus);
223 * Init operation status <br>
227 * @param operationType
230 * @param operationContent
233 * @throws MsoRequestsDbException
234 * @since ONAP Casablanca Release
238 public void initServiceOperationStatus(String serviceId, String operationId, String operationType, String userId,
239 String result, String operationContent, String progress, String reason) throws MsoRequestsDbException {
240 OperationStatus operStatus = new OperationStatus();
242 operStatus.setOperationId(operationId);
243 operStatus.setServiceId(serviceId);
244 operStatus.setUserId(userId);
245 operStatus.setOperation(operationType);
246 operStatus.setReason(reason);
247 operStatus.setProgress(progress);
248 operStatus.setResult(result);
249 operStatus.setOperationContent(operationContent);
250 operStatus.setResult(result);
251 operationStatusRepository.save(operStatus);
255 * init the operation status of all the resources <br>
261 * @param operationType
263 * @param resourceTemplateUUIDs
264 * the resources, the UUID is split by ":"
265 * @throws MsoRequestsDbException
266 * @since ONAP Amsterdam Release
270 public void initResourceOperationStatus(String serviceId, String operationId, String operationType,
271 String resourceTemplateUUIDs) throws MsoRequestsDbException {
272 String[] resourceLst = resourceTemplateUUIDs.split(":");
273 for (String resource : resourceLst) {
274 if ("".equals(resource)) {
277 ResourceOperationStatus resourceStatus = new ResourceOperationStatus();
278 resourceStatus.setOperationId(operationId);
279 resourceStatus.setServiceId(serviceId);
280 resourceStatus.setResourceTemplateUUID(resource);
281 resourceStatus.setOperType(operationType);
282 resourceStatus.setStatus(RequestsDbConstant.Status.PROCESSING);
283 resourceStatus.setStatusDescription("Waiting for start");
284 resourceOperationStatusRepository.save(resourceStatus);
290 * get resource operation status <br>
294 * @param resourceTemplateUUID
296 * @throws MsoRequestsDbException
297 * @since ONAP Amsterdam Release
300 public ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId,
301 String resourceTemplateUUID) throws MsoRequestsDbException {
303 return resourceOperationStatusRepository
304 .findById(new ResourceOperationStatusId(serviceId, operationId, resourceTemplateUUID)).
305 orElseThrow( () -> new MsoRequestsDbException("Operation not found:" + operationId));
310 * update resource operation status <br>
314 * @param resourceTemplateUUID
315 * @param operationType
316 * @param resourceInstanceID
321 * @param statusDescription
322 * @throws MsoRequestsDbException
323 * @since ONAP Amsterdam Release
326 public void updateResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID,
327 String operationType, String resourceInstanceID, String jobId, String status, String progress,
328 String errorCode, String statusDescription) throws MsoRequestsDbException {
329 ResourceOperationStatus resStatus = new ResourceOperationStatus();
330 resStatus.setServiceId(serviceId);
331 resStatus.setOperationId(operationId);
332 resStatus.setResourceTemplateUUID(resourceTemplateUUID);
333 resStatus.setOperType(operationType);
334 resStatus.setResourceInstanceID(resourceInstanceID);
335 resStatus.setJobId(jobId);
336 resStatus.setStatus(status);
337 resStatus.setProgress(progress);
338 resStatus.setErrorCode(errorCode);
339 resStatus.setStatusDescription(statusDescription);
340 resourceOperationStatusRepository.save(resStatus);
342 updateOperationStatusBasedOnResourceStatus(resStatus);
346 * update service operation status when a operation resource status updated
349 * @param operStatus the resource operation status
350 * @since ONAP Amsterdam Release
352 private void updateOperationStatusBasedOnResourceStatus(ResourceOperationStatus operStatus) {
353 String serviceId = operStatus.getServiceId();
354 String operationId = operStatus.getOperationId();
356 logger.debug("Request database - update Operation Status Based On Resource Operation Status with service Id:"
357 + serviceId + ", operationId:" + operationId);
359 List<ResourceOperationStatus> lstResourceStatus = resourceOperationStatusRepository.findByServiceIdAndOperationId(serviceId, operationId);
360 if (lstResourceStatus == null) {
361 logger.error("Unable to retrieve resourceOperStatus Object by ServiceId: " + serviceId + " operationId: " + operationId);
365 // count the total progress
366 int resourceCount = lstResourceStatus.size();
368 boolean isFinished = true;
369 for (ResourceOperationStatus lstResourceStatu : lstResourceStatus) {
370 progress = progress + Integer.valueOf(lstResourceStatu.getProgress()) / resourceCount;
371 if (RequestsDbConstant.Status.PROCESSING.equals(lstResourceStatu.getStatus())) {
376 OperationStatus serviceOperStatus = operationStatusRepository.findOneByServiceIdAndOperationId(serviceId, operationId);
377 if (serviceOperStatus == null) {
378 String error = "Entity not found. Unable to retrieve OperationStatus Object ServiceId: " + serviceId + " operationId: "
382 serviceOperStatus = new OperationStatus();
383 serviceOperStatus.setOperationId(operationId);
384 serviceOperStatus.setServiceId(serviceId);
387 progress = progress > 100 ? 100 : progress;
388 serviceOperStatus.setProgress(String.valueOf(progress));
389 serviceOperStatus.setOperationContent(operStatus.getStatusDescription());
390 // if current resource failed. service failed.
391 if(RequestsDbConstant.Status.ERROR.equals(operStatus.getStatus())) {
392 serviceOperStatus.setResult(RequestsDbConstant.Status.ERROR);
393 serviceOperStatus.setReason(operStatus.getStatusDescription());
394 } else if(isFinished) {
396 serviceOperStatus.setResult(RequestsDbConstant.Status.FINISHED);
397 serviceOperStatus.setProgress(RequestsDbConstant.Progress.ONE_HUNDRED);
400 operationStatusRepository.save(serviceOperStatus);