Containerization feature of SO
[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  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.so.adapters.requestsdb;
22
23 import java.sql.Timestamp;
24
25 import javax.jws.WebService;
26 import javax.transaction.Transactional;
27
28 import org.onap.so.adapters.requestsdb.exceptions.MsoRequestsDbException;
29 import org.onap.so.db.request.beans.InfraActiveRequests;
30 import org.onap.so.db.request.beans.OperationStatus;
31 import org.onap.so.db.request.beans.ResourceOperationStatus;
32 import org.onap.so.db.request.beans.ResourceOperationStatusId;
33 import org.onap.so.db.request.beans.SiteStatus;
34 import org.onap.so.db.request.data.repository.InfraActiveRequestsRepository;
35 import org.onap.so.db.request.data.repository.OperationStatusRepository;
36 import org.onap.so.db.request.data.repository.ResourceOperationStatusRepository;
37 import org.onap.so.db.request.data.repository.SiteStatusRepository;
38 import org.onap.so.logger.MessageEnum;
39 import org.onap.so.logger.MsoLogger;
40 import org.onap.so.requestsdb.RequestsDbConstant;
41 import org.onap.so.utils.UUIDChecker;
42 import org.springframework.beans.factory.annotation.Autowired;
43 import org.springframework.context.annotation.Primary;
44 import org.springframework.stereotype.Component;
45
46 @WebService(serviceName = "RequestsDbAdapter", endpointInterface = "org.onap.so.adapters.requestsdb.MsoRequestsDbAdapter", targetNamespace = "http://org.onap.so/requestsdb")
47 @Component
48 @Primary
49 public class MsoRequestsDbAdapterImpl implements MsoRequestsDbAdapter {
50
51         private static final String SUCCESSFUL = "Successful";
52
53         private static final String GET_INFRA_REQUEST = "Get Infra request";
54
55         private static MsoLogger logger = MsoLogger.getMsoLogger(MsoLogger.Catalog.RA, MsoRequestsDbAdapterImpl.class);
56         
57         @Autowired
58         private InfraActiveRequestsRepository infraActive;
59
60         @Autowired
61         private SiteStatusRepository siteRepo;
62
63         @Autowired
64         private OperationStatusRepository operationStatusRepository;
65
66         @Autowired
67         private ResourceOperationStatusRepository resourceOperationStatusRepository;
68
69         @Transactional
70         @Override
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 {
75                 MsoLogger.setLogContext(requestId, serviceInstanceId);
76                 long startTime = System.currentTimeMillis();
77                 try {
78                         InfraActiveRequests request = infraActive.findOneByRequestIdOrClientRequestId(requestId, requestId);
79                         if (request == null) {
80                                 String error = "Entity not found. Unable to retrieve MSO Infra Requests DB for Request ID " + requestId;
81                                 throw new MsoRequestsDbException(error);
82                         }
83                         if (statusMessage != null) {
84                                 request.setStatusMessage(statusMessage);
85                         }
86                         if (responseBody != null) {
87                                 request.setResponseBody(responseBody);
88                         }
89                         if (requestStatus != null) {
90                                 request.setRequestStatus(requestStatus.toString());
91                         }
92                         if (progress != null) {
93                                 setProgress(progress, request);
94                         }
95                         if (vnfOutputs != null) {
96                                 request.setVnfOutputs(vnfOutputs);
97                         }
98                         if (serviceInstanceId != null) {
99                                 request.setServiceInstanceId(serviceInstanceId);
100                         }
101                         if (networkId != null) {
102                                 request.setNetworkId(networkId);
103                         }
104                         if (vnfId != null) {
105                                 request.setVnfId(vnfId);
106                         }
107                         if (vfModuleId != null) {
108                                 request.setVfModuleId(vfModuleId);
109                         }
110                         if (volumeGroupId != null) {
111                                 request.setVolumeGroupId(volumeGroupId);
112                         }
113                         if (serviceInstanceName != null) {
114                                 request.setServiceInstanceName(serviceInstanceName);
115                         }
116                         if (vfModuleName != null) {
117                                 request.setVfModuleName(vfModuleName);
118                         }
119                         if (configurationId != null) {
120                                 request.setConfigurationId(configurationId);
121                         }
122                         if (configurationName != null) {
123                                 request.setConfigurationName(configurationName);
124                         }
125                         if (requestStatus == RequestStatusType.COMPLETE || requestStatus == RequestStatusType.FAILED) {
126                                 Timestamp nowTimeStamp = new Timestamp(System.currentTimeMillis());
127                                 request.setEndTime(nowTimeStamp);
128                         }
129                         request.setLastModifiedBy(lastModifiedBy);
130                         infraActive.save(request);
131
132                 } catch (Exception e) {
133                         String error = "Error retrieving MSO Infra Requests DB for Request ID " + requestId;
134                         logger.error("Error " + MsoLogger.ErrorCode.BusinessProcesssError + " for " + GET_INFRA_REQUEST + " - " + MessageEnum.RA_DB_REQUEST_NOT_EXIST + " - " + error, e);
135                         logger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, error);
136                         throw new MsoRequestsDbException(error, e);
137                 }
138                 logger.recordAuditEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, SUCCESSFUL);
139
140         }
141
142         private void setProgress(String progress, InfraActiveRequests request) {
143                 try {
144                         request.setProgress(Long.parseLong(progress));
145                 } catch (NumberFormatException e) {
146                         logger.warnSimple("UpdateInfraRequest", "Invalid value sent for progress");
147                 }
148         }
149
150         @Override
151         @Transactional
152         public InfraActiveRequests getInfraRequest(String requestId) throws MsoRequestsDbException {
153                 long startTime = System.currentTimeMillis();
154                 MsoLogger.setLogContext(requestId, null);
155
156                 logger.debug("Call to MSO Infra RequestsDb adapter get method with request Id: " + requestId);
157
158                 InfraActiveRequests request = null;
159                 try {
160
161                         request = infraActive.findOneByRequestIdOrClientRequestId(requestId, requestId);
162                         if (request == null) {
163                                 String error = "Entity not found. Unable to retrieve MSO Infra Requests DB for Request ID " + requestId;
164                                 throw new MsoRequestsDbException(error);
165                         }
166                 } catch (Exception e) {
167                         String error = "Error retrieving MSO Infra Requests DB for Request ID " + requestId;
168                         logger.error("Error " + MsoLogger.ErrorCode.BusinessProcesssError + " for " + GET_INFRA_REQUEST + " - " + MessageEnum.RA_DB_REQUEST_NOT_EXIST + " - " + error, e);
169                         logger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, error);
170                         throw new MsoRequestsDbException(error, e);
171                 }
172                 logger.recordAuditEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, SUCCESSFUL);
173                 return request;
174         }
175
176         /**
177          * Get SiteStatus by SiteName.
178          *
179          * @param siteName
180          *            The unique name of the site
181          * @return Status of that site
182          */
183         @Override
184         @Transactional
185         public boolean getSiteStatus(String siteName) {
186                 UUIDChecker.generateUUID(logger);
187                 long startTime = System.currentTimeMillis();
188                 SiteStatus siteStatus;
189                 logger.debug("Request database - get Site Status with Site name:" + siteName);
190
191                 siteStatus = siteRepo.findOneBySiteName(siteName);
192                 if (siteStatus == null) {
193                         // if not exist in DB, it means the site is not disabled, thus
194                         // return true
195                         logger.recordAuditEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, SUCCESSFUL);
196                         return true;
197                 } else {
198                         logger.recordAuditEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, SUCCESSFUL);
199                         return siteStatus.getStatus();
200                 }
201         }
202
203         /**
204          * update operation status <br>
205          * 
206          * @param serviceId
207          * @param operationId
208          * @param operationType
209          * @param userId
210          * @param result
211          * @param operationContent
212          * @param progress
213          * @param reason
214          * @throws MsoRequestsDbException
215          * @since ONAP Amsterdam Release
216          */
217         @Override
218         @Transactional
219         public void updateServiceOperationStatus(String serviceId, String operationId, String operationType, String userId,
220                         String result, String operationContent, String progress, String reason) throws MsoRequestsDbException {
221                 OperationStatus operStatus = operationStatusRepository.findOneByServiceIdAndOperationId(serviceId, operationId);
222                 if (operStatus == null) {
223                         String error = "Entity not found. Unable to retrieve OperationStatus Object ServiceId: " + serviceId + " operationId: "
224                                         + operationId;
225                         MsoRequestsDbException e = new MsoRequestsDbException(error);
226                         logger.error("Error "+ MsoLogger.ErrorCode.BusinessProcesssError + " - " + MessageEnum.RA_DB_REQUEST_NOT_EXIST + " - " + error, e);
227                         throw e;
228                 }
229
230                 operStatus.setUserId(userId);
231                 operStatus.setOperation(operationType);
232                 operStatus.setReason(reason);
233                 operStatus.setProgress(progress);
234                 operStatus.setResult(result);
235                 operStatus.setOperationContent(operationContent);
236                 operStatus.setResult(result);
237                 operationStatusRepository.save(operStatus);
238         }
239
240         /**
241          * init the operation status of all the resources <br>
242          * 
243          * @param serviceId
244          *            the service Id
245          * @param operationId
246          *            the operation Id
247          * @param operationType
248          *            the operationType
249          * @param resourceTemplateUUIDs
250          *            the resources, the UUID is split by ":"
251          * @throws MsoRequestsDbException
252          * @since ONAP Amsterdam Release
253          */
254         @Override
255         @Transactional
256         public void initResourceOperationStatus(String serviceId, String operationId, String operationType,
257                         String resourceTemplateUUIDs) throws MsoRequestsDbException {
258                 String[] resourceLst = resourceTemplateUUIDs.split(":");
259                 for (String resource : resourceLst) {
260                         if ("".equals(resource)) {
261                                 continue;
262                         }
263                         ResourceOperationStatus resourceStatus = new ResourceOperationStatus();
264                         resourceStatus.setOperationId(operationId);
265                         resourceStatus.setServiceId(serviceId);
266                         resourceStatus.setResourceTemplateUUID(resource);
267                         resourceStatus.setOperType(operationType);
268                         resourceStatus.setStatus(RequestsDbConstant.Status.PROCESSING);
269                         resourceStatus.setStatusDescription("Waiting for start");
270                         resourceOperationStatusRepository.save(resourceStatus);
271
272                 }
273         }
274
275         /**
276          * get resource operation status <br>
277          * 
278          * @param serviceId
279          * @param operationId
280          * @param resourceTemplateUUID
281          * @return
282          * @throws MsoRequestsDbException
283          * @since ONAP Amsterdam Release
284          */
285         @Override
286         public ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId,
287                         String resourceTemplateUUID) throws MsoRequestsDbException {
288
289                 return resourceOperationStatusRepository
290                                 .findOne(new ResourceOperationStatusId(serviceId, operationId, resourceTemplateUUID));
291         }
292
293         /**
294          * update resource operation status <br>
295          * 
296          * @param serviceId
297          * @param operationId
298          * @param resourceTemplateUUID
299          * @param operationType
300          * @param resourceInstanceID
301          * @param jobId
302          * @param status
303          * @param progress
304          * @param errorCode
305          * @param statusDescription
306          * @throws MsoRequestsDbException
307          * @since ONAP Amsterdam Release
308          */
309         @Override
310         public void updateResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID,
311                         String operationType, String resourceInstanceID, String jobId, String status, String progress,
312                         String errorCode, String statusDescription) throws MsoRequestsDbException {
313                 ResourceOperationStatus resStatus = new ResourceOperationStatus();
314                 resStatus.setServiceId(serviceId);
315                 resStatus.setOperationId(operationId);
316                 resStatus.setResourceTemplateUUID(resourceTemplateUUID);
317                 resStatus.setOperType(operationType);
318                 resStatus.setResourceInstanceID(resourceInstanceID);
319                 resStatus.setJobId(jobId);
320                 resStatus.setStatus(status);
321                 resStatus.setProgress(progress);
322                 resStatus.setErrorCode(errorCode);
323                 resStatus.setStatusDescription(statusDescription);
324                 resourceOperationStatusRepository.save(resStatus);
325         }
326 }