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 configurationId,
65 String configurationName,
66 String vfModuleName) throws MsoRequestsDbException {
67 MsoLogger.setLogContext (requestId, null);
68 Session session = requestsDbSessionFactoryManager.getSessionFactory ().openSession ();
70 long startTime = System.currentTimeMillis ();
72 session.beginTransaction ();
73 StringBuilder queryString = new StringBuilder("update InfraActiveRequests set ");
74 if (statusMessage != null) {
75 queryString.append("statusMessage = :statusMessage, ");
77 if (responseBody != null) {
78 queryString.append("responseBody = :responseBody, ");
80 if (requestStatus != null) {
81 queryString.append("requestStatus = :requestStatus, ");
83 if (progress != null) {
84 queryString.append("progress = :progress, ");
86 if (vnfOutputs != null) {
87 queryString.append("vnfOutputs = :vnfOutputs, ");
89 if (serviceInstanceId != null) {
90 queryString.append("serviceInstanceId = :serviceInstanceId, ");
92 if (networkId != null) {
93 queryString.append("networkId = :networkId, ");
96 queryString.append("vnfId = :vnfId, ");
98 if (vfModuleId != null) {
99 queryString.append("vfModuleId = :vfModuleId, ");
101 if (volumeGroupId != null) {
102 queryString.append("volumeGroupId = :volumeGroupId, ");
104 if (serviceInstanceName != null) {
105 queryString.append("serviceInstanceName = :serviceInstanceName, ");
107 if (vfModuleName != null) {
108 queryString.append("vfModuleName = :vfModuleName, ");
110 if (configurationId != null) {
111 queryString.append("configurationId = :configurationId, ");
113 if (configurationName != null) {
114 queryString.append("configurationName = :configurationName, ");
116 if (requestStatus == RequestStatusType.COMPLETE || requestStatus == RequestStatusType.FAILED) {
117 queryString.append("endTime = :endTime, ");
119 queryString.append("modifyTime = :modifyTime, ");
121 queryString.append("lastModifiedBy = :lastModifiedBy where requestId = :requestId OR clientRequestId = :requestId");
123 logger.debug("Executing update: " + queryString.toString());
125 Query query = session.createQuery (queryString.toString());
126 query.setParameter ("requestId", requestId);
127 if (statusMessage != null) {
128 query.setParameter ("statusMessage", statusMessage);
129 logger.debug ("StatusMessage in updateInfraRequest is set to: " + statusMessage);
131 if (responseBody != null) {
132 query.setParameter ("responseBody", responseBody);
133 logger.debug ("ResponseBody in updateInfraRequest is set to: " + responseBody);
135 if (requestStatus != null) {
136 query.setParameter ("requestStatus", requestStatus.toString ());
137 logger.debug ("RequestStatus in updateInfraRequest is set to: " + requestStatus.toString());
140 if (progress != null) {
141 query.setParameter ("progress", Long.parseLong (progress));
142 logger.debug ("Progress in updateInfraRequest is set to: " + progress);
144 if (vnfOutputs != null) {
145 query.setParameter ("vnfOutputs", vnfOutputs);
146 logger.debug ("VnfOutputs in updateInfraRequest is set to: " + vnfOutputs);
148 if (serviceInstanceId != null) {
149 query.setParameter ("serviceInstanceId", serviceInstanceId);
150 logger.debug ("ServiceInstanceId in updateInfraRequest is set to: " + serviceInstanceId);
152 if (networkId != null) {
153 query.setParameter ("networkId", networkId);
154 logger.debug ("NetworkId in updateInfraRequest is set to: " + networkId);
157 query.setParameter ("vnfId", vnfId);
158 logger.debug ("VnfId in updateInfraRequest is set to: " + vnfId);
160 if (vfModuleId != null) {
161 query.setParameter ("vfModuleId", vfModuleId);
162 logger.debug ("vfModuleId in updateInfraRequest is set to: " + vfModuleId);
164 if (volumeGroupId != null) {
165 query.setParameter ("volumeGroupId", volumeGroupId);
166 logger.debug ("VolumeGroupId in updateInfraRequest is set to: " + volumeGroupId);
168 if (serviceInstanceName != null) {
169 query.setParameter ("serviceInstanceName", serviceInstanceName);
170 logger.debug ("ServiceInstanceName in updateInfraRequest is set to: " + serviceInstanceName);
172 if (vfModuleName != null) {
173 query.setParameter ("vfModuleName", vfModuleName);
174 logger.debug ("vfModuleName in updateInfraRequest is set to: " + vfModuleName);
176 if (configurationId != null) {
177 query.setParameter ("configurationId", configurationId);
178 logger.debug ("configurationId in updateInfraRequest is set to: " + configurationId);
180 if (configurationName != null) {
181 query.setParameter ("configurationName", configurationName);
182 logger.debug ("configurationName in updateInfraRequest is set to: " + configurationName);
184 if (vfModuleName != null) {
185 query.setParameter ("vfModuleName", vfModuleName);
186 logger.debug ("vfModuleName in updateInfraRequest is set to: " + vfModuleName);
188 Timestamp nowTimeStamp = new Timestamp (System.currentTimeMillis ());
189 if (requestStatus == RequestStatusType.COMPLETE || requestStatus == RequestStatusType.FAILED) {
190 query.setParameter ("endTime", nowTimeStamp);
191 logger.debug ("EndTime in updateInfraRequest is set to: " + nowTimeStamp);
193 query.setParameter ("modifyTime", nowTimeStamp);
194 logger.debug ("ModifyTime in updateInfraRequest is set to: " + nowTimeStamp);
196 query.setParameter ("lastModifiedBy", lastModifiedBy);
197 logger.debug ("LastModifiedBy in updateInfraRequest is set to: " + lastModifiedBy);
198 result = query.executeUpdate ();
199 checkIfExists (result, requestId);
200 session.getTransaction ().commit ();
201 } catch (HibernateException e) {
202 String error = "Unable to update MSO Requests DB: " + e.getMessage ();
203 logger.error (MessageEnum.RA_CANT_UPDATE_REQUEST, "infra request parameters", requestId, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "HibernateException - " + error, e);
204 logger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, error);
205 throw new MsoRequestsDbException (error, e);
207 if (session != null && session.isOpen ()) {
211 logger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
215 private void checkIfExists (int result, String requestId) throws MsoRequestsDbException {
217 String error = "Request ID does not exist in MSO Requests DB: " + requestId;
218 logger.error (MessageEnum.RA_DB_REQUEST_NOT_EXIST, requestId, "", "", MsoLogger.ErrorCode.DataError, error);
219 throw new MsoRequestsDbException (error);
225 public InfraActiveRequests getInfraRequest (String requestId) throws MsoRequestsDbException {
226 long startTime = System.currentTimeMillis ();
227 MsoLogger.setLogContext (requestId, null);
228 Session session = requestsDbSessionFactoryManager.getSessionFactory ().openSession ();
230 logger.debug ("Call to MSO Infra RequestsDb adapter get method with request Id: " + requestId);
232 InfraActiveRequests request = null;
234 session.beginTransaction ();
235 Query query = session.createQuery ("FROM InfraActiveRequests where requestId = :requestId OR clientRequestId = :requestId");
236 query.setParameter ("requestId", requestId);
237 request = (InfraActiveRequests) query.uniqueResult();
238 } catch (HibernateException e) {
239 String error = "Unable to retrieve MSO Infra Requests DB for Request ID "
241 logger.error (MessageEnum.RA_DB_REQUEST_NOT_EXIST, "Get Infra request", requestId, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "HibernateException - " + error, e);
242 logger.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError, error);
243 throw new MsoRequestsDbException (error, e);
245 if (session != null && session.isOpen ()) {
249 logger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
255 * Get SiteStatus by SiteName.
257 * @param siteName The unique name of the site
258 * @return Status of that site
261 public boolean getSiteStatus (String siteName) {
262 UUIDChecker.generateUUID (logger);
263 Session session = requestsDbSessionFactoryManager.getSessionFactory ().openSession ();
265 long startTime = System.currentTimeMillis ();
266 SiteStatus siteStatus = null;
267 logger.debug ("Request database - get Site Status with Site name:" + siteName);
269 String hql = "FROM SiteStatus WHERE siteName = :site_name";
270 Query query = session.createQuery (hql);
271 query.setParameter ("site_name", siteName);
273 siteStatus = (SiteStatus) query.uniqueResult ();
275 if (session != null && session.isOpen ()) {
279 if (siteStatus == null) {
280 // if not exist in DB, it means the site is not disabled, thus return true
281 logger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
284 logger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful");
285 return siteStatus.getStatus();
290 * update operation status
295 * @param operationType
298 * @param operationContent
301 * @throws MsoRequestsDbException
302 * @since ONAP Amsterdam Release
305 public void updateServiceOperationStatus(String serviceId, String operationId, String operationType, String userId,
306 String result, String operationContent, String progress, String reason) throws MsoRequestsDbException {
307 OperationStatus operStatus = new OperationStatus();
308 operStatus.setServiceId(serviceId);
309 operStatus.setOperationId(operationId);
310 operStatus.setUserId(userId);
311 operStatus.setOperation(operationType);
312 operStatus.setReason(reason);
313 operStatus.setProgress(progress);
314 operStatus.setResult(result);
315 operStatus.setOperationContent(operationContent);
316 RequestsDatabase.getInstance().updateOperationStatus(operStatus);
320 * init the operation status of all the resources
323 * @param serviceId the service Id
324 * @param operationId the operation Id
325 * @param operationType the operationType
326 * @param resourceTemplateUUIDs the resources, the UUID is split by ":"
327 * @throws MsoRequestsDbException
328 * @since ONAP Amsterdam Release
331 public void initResourceOperationStatus(String serviceId, String operationId, String operationType,
332 String resourceTemplateUUIDs) throws MsoRequestsDbException{
333 String[] resourceLst = resourceTemplateUUIDs.split(":");
334 for(String resource: resourceLst){
335 if("".equals(resource)){
338 ResourceOperationStatus resourceStatus = new ResourceOperationStatus();
339 resourceStatus.setOperationId(operationId);
340 resourceStatus.setServiceId(serviceId);
341 resourceStatus.setResourceTemplateUUID(resource);
342 resourceStatus.setOperType(operationType);
343 resourceStatus.setStatus(RequestsDbConstant.Status.PROCESSING);
344 resourceStatus.setStatusDescription("Waiting for start");
345 RequestsDatabase.getInstance().updateResOperStatus(resourceStatus);
350 * get resource operation status
355 * @param resourceTemplateUUID
357 * @throws MsoRequestsDbException
358 * @since ONAP Amsterdam Release
361 public ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID)
362 throws MsoRequestsDbException {
363 return RequestsDatabase.getInstance().getResourceOperationStatus(serviceId, operationId, resourceTemplateUUID);
367 * update resource operation status
372 * @param resourceTemplateUUID
373 * @param operationType
374 * @param resourceInstanceID
379 * @param statusDescription
380 * @throws MsoRequestsDbException
381 * @since ONAP Amsterdam Release
384 public void updateResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID,
385 String operationType, String resourceInstanceID, String jobId, String status, String progress,
386 String errorCode, String statusDescription) throws MsoRequestsDbException {
387 ResourceOperationStatus resStatus = new ResourceOperationStatus();
388 resStatus.setServiceId(serviceId);
389 resStatus.setOperationId(operationId);
390 resStatus.setResourceTemplateUUID(resourceTemplateUUID);
391 resStatus.setOperType(operationType);
392 resStatus.setResourceInstanceID(resourceInstanceID);
393 resStatus.setJobId(jobId);
394 resStatus.setStatus(status);
395 resStatus.setProgress(progress);
396 resStatus.setErrorCode(errorCode);
397 resStatus.setStatusDescription(statusDescription);
398 RequestsDatabase.getInstance().updateResOperStatus(resStatus);