2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.mso.adapters.requestsdb;
23 import java.sql.Timestamp;
25 import javax.jws.WebService;
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;
43 @WebService(serviceName = "RequestsDbAdapter", endpointInterface = "org.openecomp.mso.adapters.requestsdb.MsoRequestsDbAdapter", targetNamespace = "http://org.openecomp.mso/requestsdb")
44 public class MsoRequestsDbAdapterImpl implements MsoRequestsDbAdapter {
46 protected AbstractSessionFactoryManager requestsDbSessionFactoryManager = new RequestsDbSessionFactoryManager ();
48 private static MsoLogger logger = MsoLogger.getMsoLogger (MsoLogger.Catalog.RA);
51 public void updateInfraRequest (String requestId,
52 String lastModifiedBy,
55 RequestStatusType requestStatus,
58 String serviceInstanceId,
63 String serviceInstanceName,
64 String vfModuleName) throws MsoRequestsDbException {
65 MsoLogger.setLogContext (requestId, null);
66 Session session = requestsDbSessionFactoryManager.getSessionFactory ().openSession ();
68 long startTime = System.currentTimeMillis ();
70 session.beginTransaction ();
71 String queryString = "update InfraActiveRequests set ";
72 if (statusMessage != null) {
73 queryString += "statusMessage = :statusMessage, ";
75 if (responseBody != null) {
76 queryString += "responseBody = :responseBody, ";
78 if (requestStatus != null) {
79 queryString += "requestStatus = :requestStatus, ";
81 if (progress != null) {
82 queryString += "progress = :progress, ";
84 if (vnfOutputs != null) {
85 queryString += "vnfOutputs = :vnfOutputs, ";
87 if (serviceInstanceId != null) {
88 queryString += "serviceInstanceId = :serviceInstanceId, ";
90 if (networkId != null) {
91 queryString += "networkId = :networkId, ";
94 queryString += "vnfId = :vnfId, ";
96 if (vfModuleId != null) {
97 queryString += "vfModuleId = :vfModuleId, ";
99 if (volumeGroupId != null) {
100 queryString += "volumeGroupId = :volumeGroupId, ";
102 if (serviceInstanceName != null) {
103 queryString += "serviceInstanceName = :serviceInstanceName, ";
105 if (vfModuleName != null) {
106 queryString += "vfModuleName = :vfModuleName, ";
108 if (requestStatus == RequestStatusType.COMPLETE || requestStatus == RequestStatusType.FAILED) {
109 queryString += "endTime = :endTime, ";
111 queryString += "modifyTime = :modifyTime, ";
113 queryString += "lastModifiedBy = :lastModifiedBy where requestId = :requestId OR clientRequestId = :requestId";
115 logger.debug("Executing update: " + queryString);
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);
123 if (responseBody != null) {
124 query.setParameter ("responseBody", responseBody);
125 logger.debug ("ResponseBody in updateInfraRequest is set to: " + responseBody);
127 if (requestStatus != null) {
128 query.setParameter ("requestStatus", requestStatus.toString ());
129 logger.debug ("RequestStatus in updateInfraRequest is set to: " + requestStatus.toString());
132 if (progress != null) {
133 query.setParameter ("progress", Long.parseLong (progress));
134 logger.debug ("Progress in updateInfraRequest is set to: " + progress);
136 if (vnfOutputs != null) {
137 query.setParameter ("vnfOutputs", vnfOutputs);
138 logger.debug ("VnfOutputs in updateInfraRequest is set to: " + vnfOutputs);
140 if (serviceInstanceId != null) {
141 query.setParameter ("serviceInstanceId", serviceInstanceId);
142 logger.debug ("ServiceInstanceId in updateInfraRequest is set to: " + serviceInstanceId);
144 if (networkId != null) {
145 query.setParameter ("networkId", networkId);
146 logger.debug ("NetworkId in updateInfraRequest is set to: " + networkId);
149 query.setParameter ("vnfId", vnfId);
150 logger.debug ("VnfId in updateInfraRequest is set to: " + vnfId);
152 if (vfModuleId != null) {
153 query.setParameter ("vfModuleId", vfModuleId);
154 logger.debug ("vfModuleId in updateInfraRequest is set to: " + vfModuleId);
156 if (volumeGroupId != null) {
157 query.setParameter ("volumeGroupId", volumeGroupId);
158 logger.debug ("VolumeGroupId in updateInfraRequest is set to: " + volumeGroupId);
160 if (serviceInstanceName != null) {
161 query.setParameter ("serviceInstanceName", serviceInstanceName);
162 logger.debug ("ServiceInstanceName in updateInfraRequest is set to: " + serviceInstanceName);
164 if (vfModuleName != null) {
165 query.setParameter ("vfModuleName", vfModuleName);
166 logger.debug ("vfModuleName in updateInfraRequest is set to: " + vfModuleName);
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);
173 query.setParameter ("modifyTime", nowTimeStamp);
174 logger.debug ("ModifyTime in updateInfraRequest is set to: " + nowTimeStamp);
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);
187 if (session != null && session.isOpen ()) {
191 logger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
195 private void checkIfExists (int result, String requestId) throws MsoRequestsDbException {
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);
205 public InfraActiveRequests getInfraRequest (String requestId) throws MsoRequestsDbException {
206 long startTime = System.currentTimeMillis ();
207 MsoLogger.setLogContext (requestId, null);
208 Session session = requestsDbSessionFactoryManager.getSessionFactory ().openSession ();
210 logger.debug ("Call to MSO Infra RequestsDb adapter get method with request Id: " + requestId);
212 InfraActiveRequests request = null;
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 "
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);
225 if (session != null && session.isOpen ()) {
229 logger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
235 * Get SiteStatus by SiteName.
237 * @param siteName The unique name of the site
238 * @return Status of that site
241 public boolean getSiteStatus (String siteName) {
242 UUIDChecker.generateUUID (logger);
243 Session session = requestsDbSessionFactoryManager.getSessionFactory ().openSession ();
245 long startTime = System.currentTimeMillis ();
246 SiteStatus siteStatus = null;
247 logger.debug ("Request database - get Site Status with Site name:" + siteName);
249 String hql = "FROM SiteStatus WHERE siteName = :site_name";
250 Query query = session.createQuery (hql);
251 query.setParameter ("site_name", siteName);
253 siteStatus = (SiteStatus) query.uniqueResult ();
255 if (session != null && session.isOpen ()) {
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");
264 logger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
265 return siteStatus.getStatus();
270 * update operation status
275 * @param operationType
278 * @param operationContent
281 * @throws MsoRequestsDbException
282 * @since ONAP Amsterdam Release
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);
301 * init the operation status of all the resources
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
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)){
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);
331 * get resource operation status
336 * @param resourceTemplateUUID
338 * @throws MsoRequestsDbException
339 * @since ONAP Amsterdam Release
342 public ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID)
343 throws MsoRequestsDbException {
344 return RequestsDatabase.getInstance().getResourceOperationStatus(serviceId, operationId, resourceTemplateUUID);
348 * update resource operation status
353 * @param resourceTemplateUUID
354 * @param operationType
355 * @param resourceInstanceID
360 * @param statusDescription
361 * @throws MsoRequestsDbException
362 * @since ONAP Amsterdam Release
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);