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;
49 @WebService(serviceName = "RequestsDbAdapter",
50 endpointInterface = "org.onap.so.adapters.requestsdb.MsoRequestsDbAdapter",
51 targetNamespace = "http://org.onap.so/requestsdb")
54 public class MsoRequestsDbAdapterImpl implements MsoRequestsDbAdapter {
56 private static Logger logger = LoggerFactory.getLogger(MsoRequestsDbAdapterImpl.class);
59 private InfraActiveRequestsRepository infraActive;
62 private SiteStatusRepository siteRepo;
65 private OperationStatusRepository operationStatusRepository;
68 private ResourceOperationStatusRepository resourceOperationStatusRepository;
72 public void updateInfraRequest(String requestId, String lastModifiedBy, String statusMessage, String responseBody,
73 RequestStatusType requestStatus, String progress, String vnfOutputs, String serviceInstanceId,
74 String networkId, String vnfId, String vfModuleId, String volumeGroupId, String serviceInstanceName,
75 String configurationId, String configurationName, String vfModuleName) throws MsoRequestsDbException {
77 InfraActiveRequests request = infraActive.findOneByRequestId(requestId);
78 if (request == null) {
79 String error = "Entity not found. Unable to retrieve MSO Infra Requests DB for Request ID " + requestId;
80 throw new MsoRequestsDbException(error);
82 if (statusMessage != null) {
83 request.setStatusMessage(statusMessage);
85 if (responseBody != null) {
86 request.setResponseBody(responseBody);
88 if (requestStatus != null) {
89 request.setRequestStatus(requestStatus.toString());
91 if (progress != null) {
92 setProgress(progress, request);
94 if (vnfOutputs != null) {
95 request.setVnfOutputs(vnfOutputs);
97 if (serviceInstanceId != null) {
98 request.setServiceInstanceId(serviceInstanceId);
100 if (networkId != null) {
101 request.setNetworkId(networkId);
104 request.setVnfId(vnfId);
106 if (vfModuleId != null) {
107 request.setVfModuleId(vfModuleId);
109 if (volumeGroupId != null) {
110 request.setVolumeGroupId(volumeGroupId);
112 if (serviceInstanceName != null) {
113 request.setServiceInstanceName(serviceInstanceName);
115 if (vfModuleName != null) {
116 request.setVfModuleName(vfModuleName);
118 if (configurationId != null) {
119 request.setConfigurationId(configurationId);
121 if (configurationName != null) {
122 request.setConfigurationName(configurationName);
124 if (requestStatus == RequestStatusType.COMPLETE || requestStatus == RequestStatusType.FAILED) {
125 Timestamp nowTimeStamp = new Timestamp(System.currentTimeMillis());
126 request.setEndTime(nowTimeStamp);
128 request.setLastModifiedBy(lastModifiedBy);
129 infraActive.save(request);
130 } catch (Exception e) {
131 String error = "Error retrieving MSO Infra Requests DB for Request ID " + requestId;
132 logger.error(error, e);
133 throw new MsoRequestsDbException(error, ErrorCode.BusinessProcessError, e);
137 private void setProgress(String progress, InfraActiveRequests request) {
139 request.setProgress(Long.parseLong(progress));
140 } catch (NumberFormatException e) {
141 logger.warn("UpdateInfraRequest", "Invalid value sent for progress");
147 public InfraActiveRequests getInfraRequest(String requestId) throws MsoRequestsDbException {
148 logger.debug("Call to MSO Infra RequestsDb adapter get method with request Id: {}", requestId);
149 InfraActiveRequests request = null;
151 request = infraActive.findOneByRequestId(requestId);
152 if (request == null) {
153 String error = "Entity not found. Unable to retrieve MSO Infra Requests DB for Request ID " + requestId;
154 throw new MsoRequestsDbException(error);
156 } catch (Exception e) {
157 String error = "Error retrieving MSO Infra Requests DB for Request ID " + requestId;
158 logger.error(error, e);
159 throw new MsoRequestsDbException(error, ErrorCode.BusinessProcessError, e);
165 * Get SiteStatus by SiteName.
167 * @param siteName The unique name of the site
168 * @return Status of that site
172 public boolean getSiteStatus(String siteName) {
173 SiteStatus siteStatus;
174 logger.debug("Request database - get Site Status with Site name: {}", siteName);
175 siteStatus = siteRepo.findOneBySiteName(siteName);
176 if (siteStatus == null) {
177 // if not exist in DB, it means the site is not disabled, thus
181 return siteStatus.getStatus();
186 * update operation status <br>
190 * @param operationType
193 * @param operationContent
196 * @throws MsoRequestsDbException
197 * @since ONAP Amsterdam Release
201 public void updateServiceOperationStatus(String serviceId, String operationId, String operationType, String userId,
202 String result, String operationContent, String progress, String reason) throws MsoRequestsDbException {
203 OperationStatus operStatus = operationStatusRepository.findOneByServiceIdAndOperationId(serviceId, operationId);
204 if (operStatus == null) {
205 String error = "Entity not found. Unable to retrieve OperationStatus Object ServiceId: " + serviceId
206 + " operationId: " + operationId;
208 operStatus = new OperationStatus();
209 operStatus.setOperationId(operationId);
210 operStatus.setServiceId(serviceId);
213 operStatus.setUserId(userId);
214 operStatus.setOperation(operationType);
215 operStatus.setReason(reason);
216 operStatus.setProgress(progress);
217 operStatus.setResult(result);
218 operStatus.setOperationContent(operationContent);
219 operStatus.setResult(result);
220 operationStatusRepository.save(operStatus);
224 * Init operation status <br>
228 * @param operationType
231 * @param operationContent
234 * @throws MsoRequestsDbException
235 * @since ONAP Casablanca Release
239 public void initServiceOperationStatus(String serviceId, String operationId, String operationType, String userId,
240 String result, String operationContent, String progress, String reason) throws MsoRequestsDbException {
241 OperationStatus operStatus = new OperationStatus();
243 operStatus.setOperationId(operationId);
244 operStatus.setServiceId(serviceId);
245 operStatus.setUserId(userId);
246 operStatus.setOperation(operationType);
247 operStatus.setReason(reason);
248 operStatus.setProgress(progress);
249 operStatus.setResult(result);
250 operStatus.setOperationContent(operationContent);
251 operStatus.setResult(result);
252 operationStatusRepository.save(operStatus);
256 * init the operation status of all the resources <br>
258 * @param serviceId the service Id
259 * @param operationId the operation Id
260 * @param operationType the operationType
261 * @param resourceTemplateUUIDs the resources, the UUID is split by ":"
262 * @throws MsoRequestsDbException
263 * @since ONAP Amsterdam Release
267 public void initResourceOperationStatus(String serviceId, String operationId, String operationType,
268 String resourceTemplateUUIDs) throws MsoRequestsDbException {
269 String[] resourceLst = resourceTemplateUUIDs.split(":");
270 for (String resource : resourceLst) {
271 if ("".equals(resource)) {
274 ResourceOperationStatus resourceStatus = new ResourceOperationStatus();
275 resourceStatus.setOperationId(operationId);
276 resourceStatus.setServiceId(serviceId);
277 resourceStatus.setResourceTemplateUUID(resource);
278 resourceStatus.setOperType(operationType);
279 resourceStatus.setStatus(RequestsDbConstant.Status.PROCESSING);
280 resourceStatus.setStatusDescription("Waiting for start");
281 resourceOperationStatusRepository.save(resourceStatus);
287 * get resource operation status <br>
291 * @param resourceTemplateUUID
293 * @throws MsoRequestsDbException
294 * @since ONAP Amsterdam Release
297 public ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId,
298 String resourceTemplateUUID) throws MsoRequestsDbException {
300 return resourceOperationStatusRepository
301 .findById(new ResourceOperationStatusId(serviceId, operationId, resourceTemplateUUID))
302 .orElseThrow(() -> new MsoRequestsDbException("Operation not found:" + operationId));
307 * update resource operation status <br>
311 * @param resourceTemplateUUID
312 * @param operationType
313 * @param resourceInstanceID
318 * @param statusDescription
319 * @throws MsoRequestsDbException
320 * @since ONAP Amsterdam Release
323 public void updateResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID,
324 String operationType, String resourceInstanceID, String jobId, String status, String progress,
325 String errorCode, String statusDescription) throws MsoRequestsDbException {
326 ResourceOperationStatus resStatus = new ResourceOperationStatus();
327 resStatus.setServiceId(serviceId);
328 resStatus.setOperationId(operationId);
329 resStatus.setResourceTemplateUUID(resourceTemplateUUID);
330 resStatus.setOperType(operationType);
331 resStatus.setResourceInstanceID(resourceInstanceID);
332 resStatus.setJobId(jobId);
333 resStatus.setStatus(status);
334 resStatus.setProgress(progress);
335 resStatus.setErrorCode(errorCode);
336 resStatus.setStatusDescription(statusDescription);
337 resourceOperationStatusRepository.save(resStatus);
339 updateOperationStatusBasedOnResourceStatus(resStatus);
343 * update service operation status when a operation resource status updated <br>
345 * @param operStatus the resource operation status
346 * @since ONAP Amsterdam Release
348 private void updateOperationStatusBasedOnResourceStatus(ResourceOperationStatus operStatus) {
349 String serviceId = operStatus.getServiceId();
350 String operationId = operStatus.getOperationId();
352 logger.debug("Request database - update Operation Status Based On Resource Operation Status with service Id: "
353 + "{}, operationId: {}", serviceId, operationId);
355 List<ResourceOperationStatus> lstResourceStatus =
356 resourceOperationStatusRepository.findByServiceIdAndOperationId(serviceId, operationId);
357 if (lstResourceStatus == null) {
358 logger.error("Unable to retrieve resourceOperStatus Object by ServiceId: {} operationId: {}", serviceId,
363 // count the total progress
364 int resourceCount = lstResourceStatus.size();
366 boolean isFinished = true;
367 for (ResourceOperationStatus lstResourceStatu : lstResourceStatus) {
368 progress = progress + Integer.valueOf(lstResourceStatu.getProgress()) / resourceCount;
369 if (RequestsDbConstant.Status.PROCESSING.equals(lstResourceStatu.getStatus())) {
374 OperationStatus serviceOperStatus =
375 operationStatusRepository.findOneByServiceIdAndOperationId(serviceId, operationId);
376 if (serviceOperStatus == null) {
377 String error = "Entity not found. Unable to retrieve OperationStatus Object ServiceId: " + serviceId
378 + " operationId: " + operationId;
381 serviceOperStatus = new OperationStatus();
382 serviceOperStatus.setOperationId(operationId);
383 serviceOperStatus.setServiceId(serviceId);
386 progress = progress > 100 ? 100 : progress;
387 serviceOperStatus.setProgress(String.valueOf(progress));
388 serviceOperStatus.setOperationContent(operStatus.getStatusDescription());
389 // if current resource failed. service failed.
390 if (RequestsDbConstant.Status.ERROR.equals(operStatus.getStatus())) {
391 serviceOperStatus.setResult(RequestsDbConstant.Status.ERROR);
392 serviceOperStatus.setReason(operStatus.getStatusDescription());
393 } else if (isFinished) {
395 serviceOperStatus.setResult(RequestsDbConstant.Status.FINISHED);
396 serviceOperStatus.setProgress(RequestsDbConstant.Progress.ONE_HUNDRED);
399 operationStatusRepository.save(serviceOperStatus);