d0eae88c9e8e5f1b0c2df3d91fcfa38a52fc22bc
[so.git] / adapters / mso-requests-db-adapter / src / main / java / org / onap / so / adapters / requestsdb / MsoRequestsDbAdapterImpl.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
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
12  * 
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  * 
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=========================================================
21  */
22
23 package org.onap.so.adapters.requestsdb;
24
25 import java.sql.Timestamp;
26
27 import javax.jws.WebService;
28 import javax.transaction.Transactional;
29
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;
47
48 @WebService(serviceName = "RequestsDbAdapter", endpointInterface = "org.onap.so.adapters.requestsdb.MsoRequestsDbAdapter", targetNamespace = "http://org.onap.so/requestsdb")
49 @Component
50 @Primary
51 public class MsoRequestsDbAdapterImpl implements MsoRequestsDbAdapter {
52
53         private static final String SUCCESSFUL = "Successful";
54
55         private static final String GET_INFRA_REQUEST = "Get Infra request";
56         
57         private static final String ERROR = "Error ";
58
59         private static MsoLogger logger = MsoLogger.getMsoLogger(MsoLogger.Catalog.RA, MsoRequestsDbAdapterImpl.class);
60         
61         @Autowired
62         private InfraActiveRequestsRepository infraActive;
63
64         @Autowired
65         private SiteStatusRepository siteRepo;
66
67         @Autowired
68         private OperationStatusRepository operationStatusRepository;
69
70         @Autowired
71         private ResourceOperationStatusRepository resourceOperationStatusRepository;
72
73         @Transactional
74         @Override
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();
81                 try {
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);
86                         }
87                         if (statusMessage != null) {
88                                 request.setStatusMessage(statusMessage);
89                         }
90                         if (responseBody != null) {
91                                 request.setResponseBody(responseBody);
92                         }
93                         if (requestStatus != null) {
94                                 request.setRequestStatus(requestStatus.toString());
95                         }
96                         if (progress != null) {
97                                 setProgress(progress, request);
98                         }
99                         if (vnfOutputs != null) {
100                                 request.setVnfOutputs(vnfOutputs);
101                         }
102                         if (serviceInstanceId != null) {
103                                 request.setServiceInstanceId(serviceInstanceId);
104                         }
105                         if (networkId != null) {
106                                 request.setNetworkId(networkId);
107                         }
108                         if (vnfId != null) {
109                                 request.setVnfId(vnfId);
110                         }
111                         if (vfModuleId != null) {
112                                 request.setVfModuleId(vfModuleId);
113                         }
114                         if (volumeGroupId != null) {
115                                 request.setVolumeGroupId(volumeGroupId);
116                         }
117                         if (serviceInstanceName != null) {
118                                 request.setServiceInstanceName(serviceInstanceName);
119                         }
120                         if (vfModuleName != null) {
121                                 request.setVfModuleName(vfModuleName);
122                         }
123                         if (configurationId != null) {
124                                 request.setConfigurationId(configurationId);
125                         }
126                         if (configurationName != null) {
127                                 request.setConfigurationName(configurationName);
128                         }
129                         if (requestStatus == RequestStatusType.COMPLETE || requestStatus == RequestStatusType.FAILED) {
130                                 Timestamp nowTimeStamp = new Timestamp(System.currentTimeMillis());
131                                 request.setEndTime(nowTimeStamp);
132                         }
133                         request.setLastModifiedBy(lastModifiedBy);
134                         infraActive.save(request);
135
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);
141                 }
142                 logger.recordAuditEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, SUCCESSFUL);
143
144         }
145
146         private void setProgress(String progress, InfraActiveRequests request) {
147                 try {
148                         request.setProgress(Long.parseLong(progress));
149                 } catch (NumberFormatException e) {
150                         logger.warnSimple("UpdateInfraRequest", "Invalid value sent for progress");
151                 }
152         }
153
154         @Override
155         @Transactional
156         public InfraActiveRequests getInfraRequest(String requestId) throws MsoRequestsDbException {
157                 long startTime = System.currentTimeMillis();
158                 MsoLogger.setLogContext(requestId, null);
159
160                 logger.debug("Call to MSO Infra RequestsDb adapter get method with request Id: " + requestId);
161
162                 InfraActiveRequests request = null;
163                 try {
164
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);
169                         }
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);
175                 }
176                 logger.recordAuditEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, SUCCESSFUL);
177                 return request;
178         }
179
180         /**
181          * Get SiteStatus by SiteName.
182          *
183          * @param siteName
184          *            The unique name of the site
185          * @return Status of that site
186          */
187         @Override
188         @Transactional
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);
194
195                 siteStatus = siteRepo.findOneBySiteName(siteName);
196                 if (siteStatus == null) {
197                         // if not exist in DB, it means the site is not disabled, thus
198                         // return true
199                         logger.recordAuditEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, SUCCESSFUL);
200                         return true;
201                 } else {
202                         logger.recordAuditEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, SUCCESSFUL);
203                         return siteStatus.getStatus();
204                 }
205         }
206
207         /**
208          * update operation status <br>
209          * 
210          * @param serviceId
211          * @param operationId
212          * @param operationType
213          * @param userId
214          * @param result
215          * @param operationContent
216          * @param progress
217          * @param reason
218          * @throws MsoRequestsDbException
219          * @since ONAP Amsterdam Release
220          */
221         @Override
222         @Transactional
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: "
228                                         + operationId;
229                         MsoRequestsDbException e = new MsoRequestsDbException(error);
230                         logger.error(ERROR+ MsoLogger.ErrorCode.BusinessProcesssError + " - " + MessageEnum.RA_DB_REQUEST_NOT_EXIST + " - " + error, e);
231                         throw e;
232                 }
233
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);
242         }
243
244         /**
245          * init the operation status of all the resources <br>
246          * 
247          * @param serviceId
248          *            the service Id
249          * @param operationId
250          *            the operation Id
251          * @param operationType
252          *            the operationType
253          * @param resourceTemplateUUIDs
254          *            the resources, the UUID is split by ":"
255          * @throws MsoRequestsDbException
256          * @since ONAP Amsterdam Release
257          */
258         @Override
259         @Transactional
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)) {
265                                 continue;
266                         }
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);
275
276                 }
277         }
278
279         /**
280          * get resource operation status <br>
281          * 
282          * @param serviceId
283          * @param operationId
284          * @param resourceTemplateUUID
285          * @return
286          * @throws MsoRequestsDbException
287          * @since ONAP Amsterdam Release
288          */
289         @Override
290         public ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId,
291                         String resourceTemplateUUID) throws MsoRequestsDbException {
292
293                 return resourceOperationStatusRepository
294                                 .findOne(new ResourceOperationStatusId(serviceId, operationId, resourceTemplateUUID));
295         }
296
297         /**
298          * update resource operation status <br>
299          * 
300          * @param serviceId
301          * @param operationId
302          * @param resourceTemplateUUID
303          * @param operationType
304          * @param resourceInstanceID
305          * @param jobId
306          * @param status
307          * @param progress
308          * @param errorCode
309          * @param statusDescription
310          * @throws MsoRequestsDbException
311          * @since ONAP Amsterdam Release
312          */
313         @Override
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);
329         }
330 }