2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Modifications Copyright (C) 2018 IBM.
8 * Modifications Copyright (c) 2019 Samsung
9 * ================================================================================
10 * Licensed under the Apache License, Version 2.0 (the "License");
11 * you may not use this file except in compliance with the License.
12 * You may obtain a copy of the License at
14 * http://www.apache.org/licenses/LICENSE-2.0
16 * Unless required by applicable law or agreed to in writing, software
17 * distributed under the License is distributed on an "AS IS" BASIS,
18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 * See the License for the specific language governing permissions and
20 * limitations under the License.
21 * ============LICENSE_END=========================================================
24 package org.onap.so.adapters.requestsdb;
26 import java.sql.Timestamp;
27 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.ErrorCode;
41 import org.onap.so.requestsdb.RequestsDbConstant;
42 import org.slf4j.Logger;
43 import org.slf4j.LoggerFactory;
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",
49 endpointInterface = "org.onap.so.adapters.requestsdb.MsoRequestsDbAdapter",
50 targetNamespace = "http://org.onap.so/requestsdb")
53 public class MsoRequestsDbAdapterImpl implements MsoRequestsDbAdapter {
55 private static Logger logger = LoggerFactory.getLogger(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 {
76 InfraActiveRequests request = infraActive.findOneByRequestId(requestId);
77 if (request == null) {
78 String error = "Entity not found. Unable to retrieve MSO Infra Requests DB for Request ID " + requestId;
79 throw new MsoRequestsDbException(error);
81 if (statusMessage != null) {
82 request.setStatusMessage(statusMessage);
84 if (responseBody != null) {
85 request.setResponseBody(responseBody);
87 if (requestStatus != null) {
88 request.setRequestStatus(requestStatus.toString());
90 if (progress != null) {
91 setProgress(progress, request);
93 if (vnfOutputs != null) {
94 request.setVnfOutputs(vnfOutputs);
96 if (serviceInstanceId != null) {
97 request.setServiceInstanceId(serviceInstanceId);
99 if (networkId != null) {
100 request.setNetworkId(networkId);
103 request.setVnfId(vnfId);
105 if (vfModuleId != null) {
106 request.setVfModuleId(vfModuleId);
108 if (volumeGroupId != null) {
109 request.setVolumeGroupId(volumeGroupId);
111 if (serviceInstanceName != null) {
112 request.setServiceInstanceName(serviceInstanceName);
114 if (vfModuleName != null) {
115 request.setVfModuleName(vfModuleName);
117 if (configurationId != null) {
118 request.setConfigurationId(configurationId);
120 if (configurationName != null) {
121 request.setConfigurationName(configurationName);
123 if (requestStatus == RequestStatusType.COMPLETE || requestStatus == RequestStatusType.FAILED) {
124 Timestamp nowTimeStamp = new Timestamp(System.currentTimeMillis());
125 request.setEndTime(nowTimeStamp);
127 request.setLastModifiedBy(lastModifiedBy);
128 infraActive.save(request);
129 } catch (Exception e) {
130 String error = "Error retrieving MSO Infra Requests DB for Request ID " + requestId;
131 logger.error(error, e);
132 throw new MsoRequestsDbException(error, ErrorCode.BusinessProcessError, e);
136 private void setProgress(String progress, InfraActiveRequests request) {
138 request.setProgress(Long.parseLong(progress));
139 } catch (NumberFormatException e) {
140 logger.warn("UpdateInfraRequest", "Invalid value sent for progress");
146 public InfraActiveRequests getInfraRequest(String requestId) throws MsoRequestsDbException {
147 logger.debug("Call to MSO Infra RequestsDb adapter get method with request Id: {}", requestId);
148 InfraActiveRequests request = null;
150 request = infraActive.findOneByRequestId(requestId);
151 if (request == null) {
152 String error = "Entity not found. Unable to retrieve MSO Infra Requests DB for Request ID " + requestId;
153 throw new MsoRequestsDbException(error);
155 } catch (Exception e) {
156 String error = "Error retrieving MSO Infra Requests DB for Request ID " + requestId;
157 logger.error(error, e);
158 throw new MsoRequestsDbException(error, ErrorCode.BusinessProcessError, e);
164 * Get SiteStatus by SiteName.
166 * @param siteName The unique name of the site
167 * @return Status of that site
171 public boolean getSiteStatus(String siteName) {
172 SiteStatus siteStatus;
173 logger.debug("Request database - get Site Status with Site name: {}", siteName);
174 siteStatus = siteRepo.findOneBySiteName(siteName);
175 if (siteStatus == null) {
176 // if not exist in DB, it means the site is not disabled, thus
180 return siteStatus.getStatus();
185 * update operation status <br>
189 * @param operationType
192 * @param operationContent
195 * @throws MsoRequestsDbException
196 * @since ONAP Amsterdam Release
200 public void updateServiceOperationStatus(String serviceId, String operationId, String operationType, String userId,
201 String result, String operationContent, String progress, String reason) throws MsoRequestsDbException {
202 OperationStatus operStatus = operationStatusRepository.findOneByServiceIdAndOperationId(serviceId, operationId);
203 if (operStatus == null) {
204 String error = "Entity not found. Unable to retrieve OperationStatus Object ServiceId: " + serviceId
205 + " operationId: " + operationId;
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>
257 * @param serviceId the service Id
258 * @param operationId the operation Id
259 * @param operationType the operationType
260 * @param resourceTemplateUUIDs the resources, the UUID is split by ":"
261 * @throws MsoRequestsDbException
262 * @since ONAP Amsterdam Release
266 public void initResourceOperationStatus(String serviceId, String operationId, String operationType,
267 String resourceTemplateUUIDs) throws MsoRequestsDbException {
268 String[] resourceLst = resourceTemplateUUIDs.split(":");
269 for (String resource : resourceLst) {
270 if ("".equals(resource)) {
273 ResourceOperationStatus resourceStatus = new ResourceOperationStatus();
274 resourceStatus.setOperationId(operationId);
275 resourceStatus.setServiceId(serviceId);
276 resourceStatus.setResourceTemplateUUID(resource);
277 resourceStatus.setOperType(operationType);
278 resourceStatus.setStatus(RequestsDbConstant.Status.PROCESSING);
279 resourceStatus.setStatusDescription("Waiting for start");
280 resourceOperationStatusRepository.save(resourceStatus);
286 * get resource operation status <br>
290 * @param resourceTemplateUUID
292 * @throws MsoRequestsDbException
293 * @since ONAP Amsterdam Release
296 public ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId,
297 String resourceTemplateUUID) throws MsoRequestsDbException {
299 return resourceOperationStatusRepository
300 .findById(new ResourceOperationStatusId(serviceId, operationId, resourceTemplateUUID))
301 .orElseThrow(() -> new MsoRequestsDbException("Operation not found:" + operationId));
306 * update resource operation status <br>
310 * @param resourceTemplateUUID
311 * @param operationType
312 * @param resourceInstanceID
317 * @param statusDescription
318 * @throws MsoRequestsDbException
319 * @since ONAP Amsterdam Release
322 public void updateResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID,
323 String operationType, String resourceInstanceID, String jobId, String status, String progress,
324 String errorCode, String statusDescription) throws MsoRequestsDbException {
325 ResourceOperationStatus resStatus = new ResourceOperationStatus();
326 resStatus.setServiceId(serviceId);
327 resStatus.setOperationId(operationId);
328 resStatus.setResourceTemplateUUID(resourceTemplateUUID);
329 resStatus.setOperType(operationType);
330 resStatus.setResourceInstanceID(resourceInstanceID);
331 resStatus.setJobId(jobId);
332 resStatus.setStatus(status);
333 resStatus.setProgress(progress);
334 resStatus.setErrorCode(errorCode);
335 resStatus.setStatusDescription(statusDescription);
336 resourceOperationStatusRepository.save(resStatus);
338 updateOperationStatusBasedOnResourceStatus(resStatus);
342 * update service operation status when a operation resource status updated <br>
344 * @param operStatus the resource operation status
345 * @since ONAP Amsterdam Release
347 private void updateOperationStatusBasedOnResourceStatus(ResourceOperationStatus operStatus) {
348 String serviceId = operStatus.getServiceId();
349 String operationId = operStatus.getOperationId();
351 logger.debug("Request database - update Operation Status Based On Resource Operation Status with service Id: "
352 + "{}, operationId: {}", serviceId, operationId);
354 List<ResourceOperationStatus> lstResourceStatus =
355 resourceOperationStatusRepository.findByServiceIdAndOperationId(serviceId, operationId);
356 if (lstResourceStatus == null) {
357 logger.error("Unable to retrieve resourceOperStatus Object by ServiceId: {} operationId: {}", serviceId,
362 // count the total progress
363 int resourceCount = lstResourceStatus.size();
365 boolean isFinished = true;
366 for (ResourceOperationStatus lstResourceStatu : lstResourceStatus) {
367 progress = progress + Integer.valueOf(lstResourceStatu.getProgress()) / resourceCount;
368 if (RequestsDbConstant.Status.PROCESSING.equals(lstResourceStatu.getStatus())) {
373 OperationStatus serviceOperStatus =
374 operationStatusRepository.findOneByServiceIdAndOperationId(serviceId, operationId);
375 if (serviceOperStatus == null) {
376 String error = "Entity not found. Unable to retrieve OperationStatus Object ServiceId: " + serviceId
377 + " operationId: " + operationId;
380 serviceOperStatus = new OperationStatus();
381 serviceOperStatus.setOperationId(operationId);
382 serviceOperStatus.setServiceId(serviceId);
385 progress = progress > 100 ? 100 : progress;
386 serviceOperStatus.setProgress(String.valueOf(progress));
387 serviceOperStatus.setOperationContent(operStatus.getStatusDescription());
388 // if current resource failed. service failed.
389 if (RequestsDbConstant.Status.ERROR.equals(operStatus.getStatus())) {
390 serviceOperStatus.setResult(RequestsDbConstant.Status.ERROR);
391 serviceOperStatus.setReason(operStatus.getStatusDescription());
392 } else if (isFinished) {
394 serviceOperStatus.setResult(RequestsDbConstant.Status.FINISHED);
395 serviceOperStatus.setProgress(RequestsDbConstant.Progress.ONE_HUNDRED);
398 operationStatusRepository.save(serviceOperStatus);