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.InstanceNfvoMapping;
35 import org.onap.so.db.request.beans.ResourceOperationStatusId;
36 import org.onap.so.db.request.beans.SiteStatus;
37 import org.onap.so.db.request.data.repository.InfraActiveRequestsRepository;
38 import org.onap.so.db.request.data.repository.OperationStatusRepository;
39 import org.onap.so.db.request.data.repository.ResourceOperationStatusRepository;
40 import org.onap.so.db.request.data.repository.SiteStatusRepository;
41 import org.onap.so.db.request.data.repository.InstanceNfvoMappingRepository;
42 import org.onap.so.logger.ErrorCode;
43 import org.onap.so.requestsdb.RequestsDbConstant;
44 import org.slf4j.Logger;
45 import org.slf4j.LoggerFactory;
46 import org.springframework.beans.factory.annotation.Autowired;
47 import org.springframework.context.annotation.Primary;
48 import org.springframework.stereotype.Component;
51 @WebService(serviceName = "RequestsDbAdapter",
52 endpointInterface = "org.onap.so.adapters.requestsdb.MsoRequestsDbAdapter",
53 targetNamespace = "http://org.onap.so/requestsdb")
56 public class MsoRequestsDbAdapterImpl implements MsoRequestsDbAdapter {
58 private static Logger logger = LoggerFactory.getLogger(MsoRequestsDbAdapterImpl.class);
61 private InfraActiveRequestsRepository infraActive;
64 private InstanceNfvoMappingRepository instanceNfvoMappingRepository;
67 private SiteStatusRepository siteRepo;
70 private OperationStatusRepository operationStatusRepository;
73 private ResourceOperationStatusRepository resourceOperationStatusRepository;
77 public void setInstanceNfvoMappingRepository(String instanceId, String nfvoName, String endpoint, String username,
78 String password, String apiRoot) {
79 InstanceNfvoMapping instanceNfvoMapping = new InstanceNfvoMapping();
80 if (apiRoot != null) {
81 instanceNfvoMapping.setApiRoot(apiRoot);
83 if (endpoint != null) {
84 instanceNfvoMapping.setEndpoint(endpoint);
86 if (instanceId != null) {
87 instanceNfvoMapping.setInstanceId(instanceId);
89 if (nfvoName != null) {
90 instanceNfvoMapping.setNfvoName(nfvoName);
92 if (username != null) {
93 instanceNfvoMapping.setUsername(username);
95 if (password != null) {
96 instanceNfvoMapping.setPassword(password);
99 instanceNfvoMappingRepository.save(instanceNfvoMapping);
104 public InstanceNfvoMapping getInstanceNfvoMapping(String instanceId) {
105 InstanceNfvoMapping instanceNfvoMapping = instanceNfvoMappingRepository.findOneByInstanceId(instanceId);
106 return instanceNfvoMapping;
111 public void updateInfraRequest(String requestId, String lastModifiedBy, String statusMessage, String responseBody,
112 RequestStatusType requestStatus, String progress, String vnfOutputs, String serviceInstanceId,
113 String networkId, String vnfId, String vfModuleId, String volumeGroupId, String serviceInstanceName,
114 String configurationId, String configurationName, String vfModuleName) throws MsoRequestsDbException {
116 InfraActiveRequests request = infraActive.findOneByRequestId(requestId);
117 if (request == null) {
118 String error = "Entity not found. Unable to retrieve MSO Infra Requests DB for Request ID " + requestId;
119 throw new MsoRequestsDbException(error);
121 if (statusMessage != null) {
122 request.setStatusMessage(statusMessage);
124 if (responseBody != null) {
125 request.setResponseBody(responseBody);
127 if (requestStatus != null) {
128 request.setRequestStatus(requestStatus.toString());
130 if (progress != null) {
131 setProgress(progress, request);
133 if (vnfOutputs != null) {
134 request.setVnfOutputs(vnfOutputs);
136 if (serviceInstanceId != null) {
137 request.setServiceInstanceId(serviceInstanceId);
139 if (networkId != null) {
140 request.setNetworkId(networkId);
143 request.setVnfId(vnfId);
145 if (vfModuleId != null) {
146 request.setVfModuleId(vfModuleId);
148 if (volumeGroupId != null) {
149 request.setVolumeGroupId(volumeGroupId);
151 if (serviceInstanceName != null) {
152 request.setServiceInstanceName(serviceInstanceName);
154 if (vfModuleName != null) {
155 request.setVfModuleName(vfModuleName);
157 if (configurationId != null) {
158 request.setConfigurationId(configurationId);
160 if (configurationName != null) {
161 request.setConfigurationName(configurationName);
163 if (requestStatus == RequestStatusType.COMPLETE || requestStatus == RequestStatusType.FAILED) {
164 Timestamp nowTimeStamp = new Timestamp(System.currentTimeMillis());
165 request.setEndTime(nowTimeStamp);
167 request.setLastModifiedBy(lastModifiedBy);
168 infraActive.save(request);
169 } catch (Exception e) {
170 String error = "Error retrieving MSO Infra Requests DB for Request ID " + requestId;
171 logger.error(error, e);
172 throw new MsoRequestsDbException(error, ErrorCode.BusinessProcessError, e);
176 private void setProgress(String progress, InfraActiveRequests request) {
178 request.setProgress(Long.parseLong(progress));
179 } catch (NumberFormatException e) {
180 logger.warn("UpdateInfraRequest", "Invalid value sent for progress");
186 public InfraActiveRequests getInfraRequest(String requestId) throws MsoRequestsDbException {
187 logger.debug("Call to MSO Infra RequestsDb adapter get method with request Id: {}", requestId);
188 InfraActiveRequests request = null;
190 request = infraActive.findOneByRequestId(requestId);
191 if (request == null) {
192 String error = "Entity not found. Unable to retrieve MSO Infra Requests DB for Request ID " + requestId;
193 throw new MsoRequestsDbException(error);
195 } catch (Exception e) {
196 String error = "Error retrieving MSO Infra Requests DB for Request ID " + requestId;
197 logger.error(error, e);
198 throw new MsoRequestsDbException(error, ErrorCode.BusinessProcessError, e);
204 * Get SiteStatus by SiteName.
206 * @param siteName The unique name of the site
207 * @return Status of that site
211 public boolean getSiteStatus(String siteName) {
212 SiteStatus siteStatus;
213 logger.debug("Request database - get Site Status with Site name: {}", siteName);
214 siteStatus = siteRepo.findOneBySiteName(siteName);
215 if (siteStatus == null) {
216 // if not exist in DB, it means the site is not disabled, thus
220 return siteStatus.getStatus();
225 * update operation status <br>
229 * @param operationType
232 * @param operationContent
235 * @throws MsoRequestsDbException
236 * @since ONAP Amsterdam Release
240 public void updateServiceOperationStatus(String serviceId, String operationId, String operationType, String userId,
241 String result, String operationContent, String progress, String reason) throws MsoRequestsDbException {
242 OperationStatus operStatus = operationStatusRepository.findOneByServiceIdAndOperationId(serviceId, operationId);
243 if (operStatus == null) {
244 String error = "Entity not found. Unable to retrieve OperationStatus Object ServiceId: " + serviceId
245 + " operationId: " + operationId;
247 operStatus = new OperationStatus();
248 operStatus.setOperationId(operationId);
249 operStatus.setServiceId(serviceId);
252 operStatus.setUserId(userId);
253 operStatus.setOperation(operationType);
254 operStatus.setReason(reason);
255 operStatus.setProgress(progress);
256 operStatus.setResult(result);
257 operStatus.setOperationContent(operationContent);
258 operStatus.setResult(result);
259 operationStatusRepository.save(operStatus);
263 * Init operation status <br>
267 * @param operationType
270 * @param operationContent
273 * @throws MsoRequestsDbException
274 * @since ONAP Casablanca Release
278 public void initServiceOperationStatus(String serviceId, String operationId, String operationType, String userId,
279 String result, String operationContent, String progress, String reason) throws MsoRequestsDbException {
280 OperationStatus operStatus = new OperationStatus();
282 operStatus.setOperationId(operationId);
283 operStatus.setServiceId(serviceId);
284 operStatus.setUserId(userId);
285 operStatus.setOperation(operationType);
286 operStatus.setReason(reason);
287 operStatus.setProgress(progress);
288 operStatus.setResult(result);
289 operStatus.setOperationContent(operationContent);
290 operStatus.setResult(result);
291 operationStatusRepository.save(operStatus);
295 * init the operation status of all the resources <br>
297 * @param serviceId the service Id
298 * @param operationId the operation Id
299 * @param operationType the operationType
300 * @param resourceTemplateUUIDs the resources, the UUID is split by ":"
301 * @throws MsoRequestsDbException
302 * @since ONAP Amsterdam Release
306 public void initResourceOperationStatus(String serviceId, String operationId, String operationType,
307 String resourceTemplateUUIDs) throws MsoRequestsDbException {
308 String[] resourceLst = resourceTemplateUUIDs.split(":");
309 for (String resource : resourceLst) {
310 if ("".equals(resource)) {
313 ResourceOperationStatus resourceStatus = new ResourceOperationStatus();
314 resourceStatus.setOperationId(operationId);
315 resourceStatus.setServiceId(serviceId);
316 resourceStatus.setResourceTemplateUUID(resource);
317 resourceStatus.setOperType(operationType);
318 resourceStatus.setStatus(RequestsDbConstant.Status.PROCESSING);
319 resourceStatus.setStatusDescription("Waiting for start");
320 resourceOperationStatusRepository.save(resourceStatus);
326 * get resource operation status <br>
330 * @param resourceTemplateUUID
332 * @throws MsoRequestsDbException
333 * @since ONAP Amsterdam Release
336 public ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId,
337 String resourceTemplateUUID) throws MsoRequestsDbException {
339 return resourceOperationStatusRepository
340 .findById(new ResourceOperationStatusId(serviceId, operationId, resourceTemplateUUID))
341 .orElseThrow(() -> new MsoRequestsDbException("Operation not found:" + operationId));
346 * update resource operation status <br>
350 * @param resourceTemplateUUID
351 * @param operationType
352 * @param resourceInstanceID
357 * @param statusDescription
358 * @throws MsoRequestsDbException
359 * @since ONAP Amsterdam Release
362 public void updateResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID,
363 String operationType, String resourceInstanceID, String jobId, String status, String progress,
364 String errorCode, String statusDescription) throws MsoRequestsDbException {
365 ResourceOperationStatus resStatus = new ResourceOperationStatus();
366 resStatus.setServiceId(serviceId);
367 resStatus.setOperationId(operationId);
368 resStatus.setResourceTemplateUUID(resourceTemplateUUID);
369 resStatus.setOperType(operationType);
370 resStatus.setResourceInstanceID(resourceInstanceID);
371 resStatus.setJobId(jobId);
372 resStatus.setStatus(status);
373 resStatus.setProgress(progress);
374 resStatus.setErrorCode(errorCode);
375 resStatus.setStatusDescription(statusDescription);
376 resourceOperationStatusRepository.save(resStatus);
378 updateOperationStatusBasedOnResourceStatus(resStatus);
382 * update service operation status when a operation resource status updated <br>
384 * @param operStatus the resource operation status
385 * @since ONAP Amsterdam Release
387 private void updateOperationStatusBasedOnResourceStatus(ResourceOperationStatus operStatus) {
388 String serviceId = operStatus.getServiceId();
389 String operationId = operStatus.getOperationId();
391 logger.debug("Request database - update Operation Status Based On Resource Operation Status with service Id: "
392 + "{}, operationId: {}", serviceId, operationId);
394 List<ResourceOperationStatus> lstResourceStatus =
395 resourceOperationStatusRepository.findByServiceIdAndOperationId(serviceId, operationId);
396 if (lstResourceStatus == null) {
397 logger.error("Unable to retrieve resourceOperStatus Object by ServiceId: {} operationId: {}", serviceId,
402 // count the total progress
403 int resourceCount = lstResourceStatus.size();
405 boolean isFinished = true;
406 for (ResourceOperationStatus lstResourceStatu : lstResourceStatus) {
407 progress = progress + Integer.valueOf(lstResourceStatu.getProgress()) / resourceCount;
408 if (RequestsDbConstant.Status.PROCESSING.equals(lstResourceStatu.getStatus())) {
413 OperationStatus serviceOperStatus =
414 operationStatusRepository.findOneByServiceIdAndOperationId(serviceId, operationId);
415 if (serviceOperStatus == null) {
416 String error = "Entity not found. Unable to retrieve OperationStatus Object ServiceId: " + serviceId
417 + " operationId: " + operationId;
420 serviceOperStatus = new OperationStatus();
421 serviceOperStatus.setOperationId(operationId);
422 serviceOperStatus.setServiceId(serviceId);
425 progress = progress > 100 ? 100 : progress;
426 serviceOperStatus.setProgress(String.valueOf(progress));
427 serviceOperStatus.setOperationContent(operStatus.getStatusDescription());
428 // if current resource failed. service failed.
429 if (RequestsDbConstant.Status.ERROR.equals(operStatus.getStatus())) {
430 serviceOperStatus.setResult(RequestsDbConstant.Status.ERROR);
431 serviceOperStatus.setReason(operStatus.getStatusDescription());
432 } else if (isFinished) {
434 serviceOperStatus.setResult(RequestsDbConstant.Status.FINISHED);
435 serviceOperStatus.setProgress(RequestsDbConstant.Progress.ONE_HUNDRED);
438 operationStatusRepository.save(serviceOperStatus);