99f6e86b00be70d533abd04048c9ce4a4506c2c4
[so.git] / adapters / mso-requests-db-adapter / src / main / java / org / openecomp / mso / 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.openecomp.mso.adapters.requestsdb;
22
23 import java.sql.Timestamp;
24
25 import javax.jws.WebService;
26
27 import org.hibernate.HibernateException;
28 import org.hibernate.Query;
29 import org.hibernate.Session;
30 import org.openecomp.mso.adapters.requestsdb.exceptions.MsoRequestsDbException;
31 import org.openecomp.mso.db.AbstractSessionFactoryManager;
32 import org.openecomp.mso.logger.MessageEnum;
33 import org.openecomp.mso.logger.MsoLogger;
34 import org.openecomp.mso.requestsdb.InfraActiveRequests;
35 import org.openecomp.mso.requestsdb.OperationStatus;
36 import org.openecomp.mso.requestsdb.RequestsDatabase;
37 import org.openecomp.mso.requestsdb.RequestsDbConstant;
38 import org.openecomp.mso.requestsdb.RequestsDbSessionFactoryManager;
39 import org.openecomp.mso.requestsdb.ResourceOperationStatus;
40 import org.openecomp.mso.requestsdb.SiteStatus;
41 import org.openecomp.mso.utils.UUIDChecker;
42
43 @WebService(serviceName = "RequestsDbAdapter", endpointInterface = "org.openecomp.mso.adapters.requestsdb.MsoRequestsDbAdapter", targetNamespace = "http://org.openecomp.mso/requestsdb")
44 public class MsoRequestsDbAdapterImpl implements MsoRequestsDbAdapter {
45
46     protected AbstractSessionFactoryManager requestsDbSessionFactoryManager = new RequestsDbSessionFactoryManager ();
47     
48     private static MsoLogger logger = MsoLogger.getMsoLogger (MsoLogger.Catalog.RA);
49
50     @Override
51     public void updateInfraRequest (String requestId,
52                                     String lastModifiedBy,
53                                     String statusMessage,
54                                     String responseBody,
55                                     RequestStatusType requestStatus,
56                                     String progress,
57                                     String vnfOutputs,
58                                     String serviceInstanceId,
59                                     String networkId,
60                                     String vnfId,
61                                     String vfModuleId,
62                                     String volumeGroupId,
63                                     String serviceInstanceName,
64                                     String vfModuleName) throws MsoRequestsDbException {
65         MsoLogger.setLogContext (requestId, null);
66         Session session = requestsDbSessionFactoryManager.getSessionFactory ().openSession ();
67         int result = 0;
68         long startTime = System.currentTimeMillis ();
69         try {
70                 session.beginTransaction ();
71             String queryString = "update InfraActiveRequests set ";
72             if (statusMessage != null) {
73                 queryString += "statusMessage = :statusMessage, ";
74             }
75             if (responseBody != null) {
76                 queryString += "responseBody = :responseBody, ";
77             }
78             if (requestStatus != null) {
79                 queryString += "requestStatus = :requestStatus, ";
80             }
81             if (progress != null) {
82                 queryString += "progress = :progress, ";
83             }
84             if (vnfOutputs != null) {
85                 queryString += "vnfOutputs = :vnfOutputs, ";
86             }
87             if (serviceInstanceId != null) {
88                 queryString += "serviceInstanceId = :serviceInstanceId, ";
89             }
90             if (networkId != null) {
91                 queryString += "networkId = :networkId, ";
92             }
93             if (vnfId != null) {
94                 queryString += "vnfId = :vnfId, ";
95             }
96             if (vfModuleId != null) {
97                 queryString += "vfModuleId = :vfModuleId, ";
98             }
99             if (volumeGroupId != null) {
100                 queryString += "volumeGroupId = :volumeGroupId, ";
101             }
102             if (serviceInstanceName != null) {
103                 queryString += "serviceInstanceName = :serviceInstanceName, ";
104             }
105             if (vfModuleName != null) {
106                 queryString += "vfModuleName = :vfModuleName, ";
107             }
108             if (requestStatus == RequestStatusType.COMPLETE || requestStatus == RequestStatusType.FAILED) {
109                 queryString += "endTime = :endTime, ";
110             } else {
111                 queryString += "modifyTime = :modifyTime, ";
112             }
113             queryString += "lastModifiedBy = :lastModifiedBy where requestId = :requestId OR clientRequestId = :requestId";
114
115             logger.debug("Executing update: " + queryString);
116
117             Query query = session.createQuery (queryString);
118             query.setParameter ("requestId", requestId);
119             if (statusMessage != null) {
120                 query.setParameter ("statusMessage", statusMessage);
121                 logger.debug ("StatusMessage in updateInfraRequest is set to: " + statusMessage);
122             }
123             if (responseBody != null) {
124                 query.setParameter ("responseBody", responseBody);
125                 logger.debug ("ResponseBody in updateInfraRequest is set to: " + responseBody);
126             }
127             if (requestStatus != null) {
128                 query.setParameter ("requestStatus", requestStatus.toString ());
129                 logger.debug ("RequestStatus in updateInfraRequest is set to: " + requestStatus.toString());
130             }
131
132             if (progress != null) {
133                 query.setParameter ("progress", Long.parseLong (progress));
134                 logger.debug ("Progress in updateInfraRequest is set to: " + progress);
135             }
136             if (vnfOutputs != null) {
137                 query.setParameter ("vnfOutputs", vnfOutputs);
138                 logger.debug ("VnfOutputs in updateInfraRequest is set to: " + vnfOutputs);
139             }
140             if (serviceInstanceId != null) {
141                 query.setParameter ("serviceInstanceId", serviceInstanceId);
142                 logger.debug ("ServiceInstanceId in updateInfraRequest is set to: " + serviceInstanceId);
143             }
144             if (networkId != null) {
145                 query.setParameter ("networkId", networkId);
146                 logger.debug ("NetworkId in updateInfraRequest is set to: " + networkId);
147             }
148             if (vnfId != null) {
149                 query.setParameter ("vnfId", vnfId);
150                 logger.debug ("VnfId in updateInfraRequest is set to: " + vnfId);
151             }
152             if (vfModuleId != null) {
153                 query.setParameter ("vfModuleId", vfModuleId);
154                 logger.debug ("vfModuleId in updateInfraRequest is set to: " + vfModuleId);
155             }
156             if (volumeGroupId != null) {
157                 query.setParameter ("volumeGroupId", volumeGroupId);
158                 logger.debug ("VolumeGroupId in updateInfraRequest is set to: " + volumeGroupId);
159             }
160             if (serviceInstanceName != null) {
161                 query.setParameter ("serviceInstanceName", serviceInstanceName);
162                 logger.debug ("ServiceInstanceName in updateInfraRequest is set to: " + serviceInstanceName);
163             }
164             if (vfModuleName != null) {
165                 query.setParameter ("vfModuleName", vfModuleName);
166                 logger.debug ("vfModuleName in updateInfraRequest is set to: " + vfModuleName);
167             }
168             Timestamp nowTimeStamp = new Timestamp (System.currentTimeMillis ());
169             if (requestStatus == RequestStatusType.COMPLETE || requestStatus == RequestStatusType.FAILED) {
170                 query.setParameter ("endTime", nowTimeStamp);
171                 logger.debug ("EndTime in updateInfraRequest is set to: " + nowTimeStamp);
172             } else {
173                 query.setParameter ("modifyTime", nowTimeStamp);
174                 logger.debug ("ModifyTime in updateInfraRequest is set to: " + nowTimeStamp);
175             }
176             query.setParameter ("lastModifiedBy", lastModifiedBy);
177             logger.debug ("LastModifiedBy in updateInfraRequest is set to: " + lastModifiedBy);
178             result = query.executeUpdate ();
179             checkIfExists (result, requestId);
180             session.getTransaction ().commit ();
181         } catch (HibernateException e) {
182             String error = "Unable to update MSO Requests DB: " + e.getMessage ();
183             logger.error (MessageEnum.RA_CANT_UPDATE_REQUEST, "infra request parameters", requestId, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "HibernateException - " + error, e);
184             logger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, error);
185             throw new MsoRequestsDbException (error, e);
186         } finally {
187             if (session != null && session.isOpen ()) {
188                 session.close ();
189             }
190         }
191         logger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
192     }
193
194
195     private void checkIfExists (int result, String requestId) throws MsoRequestsDbException {
196         if (result == 0) {
197             String error = "Request ID does not exist in MSO Requests DB: " + requestId;
198             logger.error (MessageEnum.RA_DB_REQUEST_NOT_EXIST, requestId, "", "", MsoLogger.ErrorCode.DataError, error);
199             throw new MsoRequestsDbException (error);
200         }
201     }
202
203
204     @Override
205     public InfraActiveRequests getInfraRequest (String requestId) throws MsoRequestsDbException {
206         long startTime = System.currentTimeMillis ();
207         MsoLogger.setLogContext (requestId, null);
208         Session session = requestsDbSessionFactoryManager.getSessionFactory ().openSession ();
209
210         logger.debug ("Call to MSO Infra RequestsDb adapter get method with request Id: " + requestId);
211
212         InfraActiveRequests request = null;
213         try {
214             session.beginTransaction ();
215             Query query = session.createQuery ("FROM InfraActiveRequests where requestId = :requestId OR clientRequestId = :requestId");
216             query.setParameter ("requestId", requestId);
217             request = (InfraActiveRequests) query.uniqueResult();
218         } catch (HibernateException e) {
219             String error = "Unable to retrieve MSO Infra Requests DB for Request ID "
220                            + requestId;
221             logger.error (MessageEnum.RA_DB_REQUEST_NOT_EXIST, "Get Infra request", requestId, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "HibernateException - " + error, e);
222             logger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, error);
223             throw new MsoRequestsDbException (error, e);
224         } finally {
225             if (session != null && session.isOpen ()) {
226                 session.close ();
227             }
228         }
229         logger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
230         return request;
231     }
232
233
234     /**
235      * Get SiteStatus by SiteName.
236      *
237      * @param siteName The unique name of the site
238      * @return Status of that site
239      */
240     @Override
241     public boolean getSiteStatus (String siteName) {
242         UUIDChecker.generateUUID (logger);
243         Session session = requestsDbSessionFactoryManager.getSessionFactory ().openSession ();
244
245         long startTime = System.currentTimeMillis ();
246         SiteStatus siteStatus = null;
247         logger.debug ("Request database - get Site Status with Site name:" + siteName);
248         try {
249             String hql = "FROM SiteStatus WHERE siteName = :site_name";
250             Query query = session.createQuery (hql);
251             query.setParameter ("site_name", siteName);
252
253             siteStatus = (SiteStatus) query.uniqueResult ();
254         } finally {
255             if (session != null && session.isOpen ()) {
256                 session.close ();
257             }
258         }
259         if (siteStatus == null) {
260             // if not exist in DB, it means the site is not disabled, thus return true
261             logger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
262             return true;
263         } else {
264             logger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
265             return siteStatus.getStatus();
266         }
267     }
268     
269     /**
270      * update operation status
271      * <br>
272      * 
273      * @param serviceId
274      * @param operationId
275      * @param operationType
276      * @param userId
277      * @param result
278      * @param operationContent
279      * @param progress
280      * @param reason
281      * @throws MsoRequestsDbException
282      * @since   ONAP Amsterdam Release
283      */
284     @Override
285     public void updateServiceOperationStatus(String serviceId, String operationId, String serviceName,String operationType, String userId,
286             String result, String operationContent, String progress, String reason) throws MsoRequestsDbException {
287         OperationStatus operStatus = new OperationStatus();
288         operStatus.setResult(RequestsDbConstant.Status.PROCESSING);
289         operStatus.setServiceId(serviceId);
290         operStatus.setOperationId(operationId);
291         operStatus.setServiceName(serviceName);
292         operStatus.setUserId(userId);
293         operStatus.setOperation(operationType);
294         operStatus.setReason(reason);
295         operStatus.setProgress(progress);
296         operStatus.setOperationContent(operationContent);
297         RequestsDatabase.getInstance().updateOperationStatus(operStatus);
298     }
299     
300     /**
301      * init the operation status of  all the resources 
302      * <br>
303      * 
304      * @param serviceId the service Id
305      * @param operationId the operation Id
306      * @param operationType the operationType
307      * @param resourceTemplateUUIDs the resources, the UUID is split by ":"
308      * @throws MsoRequestsDbException
309      * @since   ONAP Amsterdam Release
310      */
311     @Override
312     public void initResourceOperationStatus(String serviceId, String operationId, String operationType,
313             String resourceTemplateUUIDs) throws MsoRequestsDbException{
314         String[] resourceLst = resourceTemplateUUIDs.split(":");
315         for(String resource: resourceLst){
316             if("".equals(resource)){
317                 continue;
318             }
319             ResourceOperationStatus resourceStatus = new ResourceOperationStatus();
320             resourceStatus.setOperationId(operationId);
321             resourceStatus.setServiceId(serviceId);
322             resourceStatus.setResourceTemplateUUID(resource);
323             resourceStatus.setOperType(operationType);
324             resourceStatus.setStatus(RequestsDbConstant.Status.PROCESSING);
325             resourceStatus.setStatusDescription("Waiting for start");
326             RequestsDatabase.getInstance().updateResOperStatus(resourceStatus);
327         }     
328     }
329     
330     /**
331      * get resource operation status
332      * <br>
333      * 
334      * @param serviceId
335      * @param operationId
336      * @param resourceTemplateUUID
337      * @return
338      * @throws MsoRequestsDbException
339      * @since   ONAP Amsterdam Release
340      */
341     @Override
342     public ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID)
343             throws MsoRequestsDbException {
344         return RequestsDatabase.getInstance().getResourceOperationStatus(serviceId, operationId, resourceTemplateUUID);
345     }
346     
347     /**
348      * update resource operation status
349      * <br>
350      * 
351      * @param serviceId
352      * @param operationId
353      * @param resourceTemplateUUID
354      * @param operationType
355      * @param resourceInstanceID
356      * @param jobId
357      * @param status
358      * @param progress
359      * @param errorCode
360      * @param statusDescription
361      * @throws MsoRequestsDbException
362      * @since   ONAP Amsterdam Release
363      */
364     @Override
365     public void updateResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID,
366             String operationType, String resourceInstanceID, String jobId, String status, String progress,
367             String errorCode, String statusDescription) throws MsoRequestsDbException {
368          ResourceOperationStatus resStatus = new ResourceOperationStatus();
369          resStatus.setServiceId(serviceId);
370          resStatus.setOperationId(operationId);
371          resStatus.setResourceTemplateUUID(resourceTemplateUUID);
372          resStatus.setOperType(operationType);
373          resStatus.setResourceInstanceID(resourceInstanceID);
374          resStatus.setJobId(jobId);
375          resStatus.setStatus(status);
376          resStatus.setProgress(progress);
377          resStatus.setErrorCode(errorCode);
378          resStatus.setStatusDescription(statusDescription);
379          RequestsDatabase.getInstance().updateResOperStatus(resStatus);
380     }
381 }