0bdead48358d4ecc0b13c056cabe889299baf7d2
[so.git] /
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             ResourceOperationStatus resourceStatus = new ResourceOperationStatus();
317             resourceStatus.setOperationId(operationId);
318             resourceStatus.setServiceId(serviceId);
319             resourceStatus.setResourceTemplateUUID(resource);
320             resourceStatus.setOperType(operationType);
321             resourceStatus.setStatus(RequestsDbConstant.Status.PROCESSING);
322             resourceStatus.setStatusDescription("Waiting for start");
323             RequestsDatabase.getInstance().updateResOperStatus(resourceStatus);
324         }     
325     }
326     
327     /**
328      * get resource operation status
329      * <br>
330      * 
331      * @param serviceId
332      * @param operationId
333      * @param resourceUUID
334      * @return
335      * @throws MsoRequestsDbException
336      * @since   ONAP Amsterdam Release
337      */
338     @Override
339     public ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID)
340             throws MsoRequestsDbException {
341         return RequestsDatabase.getInstance().getResourceOperationStatus(serviceId, operationId, resourceTemplateUUID);
342     }
343     
344     /**
345      * update resource operation status
346      * <br>
347      * 
348      * @param serviceId
349      * @param operationId
350      * @param resourceUUID
351      * @param operationType
352      * @param resourceInstanceID
353      * @param jobId
354      * @param status
355      * @param progress
356      * @param errorCode
357      * @param statusDescription
358      * @throws MsoRequestsDbException
359      * @since   ONAP Amsterdam Release
360      */
361     @Override
362     public void updateResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID,
363             String operType, 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(operType);
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          RequestsDatabase.getInstance().updateResOperStatus(resStatus);
377     }
378 }