2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.openecomp.mso.requestsdb;
24 import java.util.Date;
25 import java.sql.Timestamp;
26 import java.text.SimpleDateFormat;
27 import java.util.ArrayList;
28 import java.util.HashMap;
29 import java.util.LinkedList;
30 import java.util.List;
32 import java.util.concurrent.TimeUnit;
34 import org.hibernate.Criteria;
35 import org.hibernate.Query;
36 import org.hibernate.Session;
37 import org.hibernate.criterion.Criterion;
38 import org.hibernate.criterion.Order;
39 import org.hibernate.criterion.Restrictions;
40 import org.openecomp.mso.db.AbstractSessionFactoryManager;
41 import org.openecomp.mso.requestsdb.RequestsDbConstant.Status;
42 import org.openecomp.mso.requestsdb.RequestsDbSessionFactoryManager;
43 import org.openecomp.mso.logger.MsoLogger;
45 public class RequestsDatabase {
47 protected final AbstractSessionFactoryManager sessionFactoryRequestDB;
49 protected static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.GENERAL);
51 protected static final String SOURCE = "source";
52 protected static final String START_TIME = "startTime";
53 protected static final String REQUEST_TYPE = "requestType";
54 protected static final String SERVICE_INSTANCE_ID = "serviceInstanceId";
55 protected static final String SERVICE_INSTANCE_NAME = "serviceInstanceName";
56 protected static final String VNF_INSTANCE_NAME = "vnfName";
57 protected static final String VNF_INSTANCE_ID = "vnfId";
58 protected static final String VOLUME_GROUP_INSTANCE_NAME = "volumeGroupName";
59 protected static final String VOLUME_GROUP_INSTANCE_ID = "volumeGroupId";
60 protected static final String VFMODULE_INSTANCE_NAME = "vfModuleName";
61 protected static final String VFMODULE_INSTANCE_ID = "vfModuleId";
62 protected static final String NETWORK_INSTANCE_NAME = "networkName";
63 protected static final String NETWORK_INSTANCE_ID = "networkId";
64 protected static final String GLOBAL_SUBSCRIBER_ID = "globalSubscriberId";
65 protected static final String SERVICE_NAME_VERSION_ID = "serviceNameVersionId";
66 protected static final String SERVICE_ID = "serviceId";
67 protected static final String SERVICE_VERSION = "serviceVersion";
69 protected static final String REQUEST_ID = "requestId";
70 protected static MockRequestsDatabase mockDB = null;
72 public static RequestsDatabase getInstance() {
73 return new RequestsDatabase(new RequestsDbSessionFactoryManager ());
76 protected RequestsDatabase (AbstractSessionFactoryManager sessionFactoryRequest) {
77 sessionFactoryRequestDB = sessionFactoryRequest;
80 public boolean healthCheck () {
81 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
83 Query query = session.createSQLQuery (" show tables ");
85 List<?> list = query.list();
88 if (session != null && session.isOpen ()) {
96 public int updateInfraStatus (String requestId, String requestStatus, String lastModifiedBy) {
97 long startTime = System.currentTimeMillis ();
98 msoLogger.debug ("Update infra request record " + requestId + " with status " + requestStatus);
99 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
103 session.beginTransaction ();
104 Query query = session.createQuery ("update InfraActiveRequests set requestStatus = :requestStatus, modifyTime = :modifyTime, lastModifiedBy = :lastModifiedBy where requestId = :requestId ");
105 query.setParameter ("requestStatus", requestStatus);
106 query.setParameter (REQUEST_ID, requestId);
107 query.setParameter ("lastModifiedBy", lastModifiedBy);
108 Timestamp modifyTimeStamp = new Timestamp (System.currentTimeMillis());
109 query.setParameter ("modifyTime", modifyTimeStamp);
110 result = query.executeUpdate ();
111 session.getTransaction ().commit ();
113 if (session != null && session.isOpen ()) {
116 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "updateInfraStatus", null);
121 public int updateInfraStatus (String requestId, String requestStatus, long progress, String lastModifiedBy) {
122 long startTime = System.currentTimeMillis ();
123 msoLogger.debug ("Update infra request record " + requestId + " with status " + requestStatus);
124 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
128 session.beginTransaction ();
129 Query query = session.createQuery ("update InfraActiveRequests set requestStatus = :requestStatus, modifyTime = :modifyTime, progress = :progress, lastModifiedBy = :lastModifiedBy where requestId = :requestId ");
130 query.setParameter ("requestStatus", requestStatus);
131 query.setParameter (REQUEST_ID, requestId);
132 query.setParameter ("progress", progress);
133 query.setParameter ("lastModifiedBy", lastModifiedBy);
134 Timestamp modifyTimeStamp = new Timestamp (System.currentTimeMillis());
135 query.setParameter ("modifyTime", modifyTimeStamp);
136 result = query.executeUpdate ();
137 session.getTransaction ().commit ();
139 if (session != null && session.isOpen ()) {
142 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "updateInfraStatus", null);
147 public int updateInfraFinalStatus (String requestId, String requestStatus, String statusMessage, long progress, String responseBody, String lastModifiedBy) {
148 long startTime = System.currentTimeMillis ();
149 msoLogger.debug ("Update infra request record " + requestId + " with status " + requestStatus);
150 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
154 session.beginTransaction ();
155 Query query = session.createQuery ("update InfraActiveRequests set requestStatus = :requestStatus, statusMessage = :statusMessage, progress = :progress, endTime = :endTime, responseBody = :responseBody, lastModifiedBy = :lastModifiedBy where id.requestId = :requestId ");
156 query.setParameter ("requestStatus", requestStatus);
157 query.setParameter ("requestId", requestId);
158 Timestamp endTimeStamp = new Timestamp (System.currentTimeMillis());
159 query.setParameter ("endTime", endTimeStamp);
160 query.setParameter ("statusMessage", statusMessage);
161 query.setParameter ("progress", progress);
162 query.setParameter ("responseBody", responseBody);
163 query.setParameter ("lastModifiedBy", lastModifiedBy);
164 result = query.executeUpdate ();
165 session.getTransaction ().commit ();
167 if (session != null && session.isOpen ()) {
170 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "updateInfraFinalStatus", null);
176 private List<InfraActiveRequests> executeInfraQuery (List <Criterion> criteria, Order order) {
178 long startTime = System.currentTimeMillis ();
179 msoLogger.debug ("Execute query on infra active request table");
181 List <InfraActiveRequests> results = new ArrayList<>();
183 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
185 session.beginTransaction ();
186 Criteria crit = session.createCriteria (InfraActiveRequests.class);
187 for (Criterion criterion : criteria) {
188 crit.add (criterion);
190 crit.addOrder (order);
192 // @SuppressWarnings("unchecked")
193 results = crit.list ();
196 if (session != null && session.isOpen ()) {
199 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "getInfraActiveRequest", null);
204 public InfraActiveRequests getRequestFromInfraActive (String requestId) {
205 long startTime = System.currentTimeMillis ();
206 msoLogger.debug ("Get request " + requestId + " from InfraActiveRequests DB");
208 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
209 InfraActiveRequests ar = null;
211 session.beginTransaction ();
212 Query query = session.createQuery ("from InfraActiveRequests where requestId = :requestId OR clientRequestId = :requestId");
213 query.setParameter (REQUEST_ID, requestId);
214 ar = (InfraActiveRequests) query.uniqueResult ();
216 if (session != null && session.isOpen ()) {
219 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "InfraRequestDB", "getRequestFromInfraActive", null);
224 public InfraActiveRequests checkInstanceNameDuplicate (HashMap<String,String> instanceIdMap, String instanceName, String requestScope) {
226 List <Criterion> criteria = new LinkedList <> ();
228 if(instanceName != null && !instanceName.equals("")) {
230 if("service".equals(requestScope)){
231 criteria.add (Restrictions.eq (SERVICE_INSTANCE_NAME, instanceName));
232 } else if("vnf".equals(requestScope)){
233 criteria.add (Restrictions.eq (VNF_INSTANCE_NAME, instanceName));
234 } else if("volumeGroup".equals(requestScope)){
235 criteria.add (Restrictions.eq (VOLUME_GROUP_INSTANCE_NAME, instanceName));
236 } else if("vfModule".equals(requestScope)){
237 criteria.add (Restrictions.eq (VFMODULE_INSTANCE_NAME, instanceName));
238 } else if("network".equals(requestScope)){
239 criteria.add (Restrictions.eq (NETWORK_INSTANCE_NAME, instanceName));
243 if(instanceIdMap != null){
244 if("service".equals(requestScope) && instanceIdMap.get("serviceInstanceId") != null){
245 criteria.add (Restrictions.eq (SERVICE_INSTANCE_ID, instanceIdMap.get("serviceInstanceId")));
248 if("vnf".equals(requestScope) && instanceIdMap.get("vnfInstanceId") != null){
249 criteria.add (Restrictions.eq (VNF_INSTANCE_ID, instanceIdMap.get("vnfInstanceId")));
252 if("vfModule".equals(requestScope) && instanceIdMap.get("vfModuleInstanceId") != null){
253 criteria.add (Restrictions.eq (VFMODULE_INSTANCE_ID, instanceIdMap.get("vfModuleInstanceId")));
256 if("volumeGroup".equals(requestScope) && instanceIdMap.get("volumeGroupInstanceId") != null){
257 criteria.add (Restrictions.eq (VOLUME_GROUP_INSTANCE_ID, instanceIdMap.get("volumeGroupInstanceId")));
260 if("network".equals(requestScope) && instanceIdMap.get("networkInstanceId") != null){
261 criteria.add (Restrictions.eq (NETWORK_INSTANCE_ID, instanceIdMap.get("networkInstanceId")));
266 criteria.add (Restrictions.in ("requestStatus", new String[] { "PENDING", "IN_PROGRESS", "TIMEOUT" }));
268 Order order = Order.desc (START_TIME);
270 List<InfraActiveRequests> dupList = executeInfraQuery(criteria, order);
272 InfraActiveRequests infraActiveRequests = null;
274 if(dupList != null && !dupList.isEmpty()){
275 infraActiveRequests = dupList.get(0);
278 return infraActiveRequests;
281 public List<InfraActiveRequests> getOrchestrationFiltersFromInfraActive (Map<String, List<String>> orchestrationMap) {
284 List <Criterion> criteria = new LinkedList <> ();
285 for (Map.Entry<String, List<String>> entry : orchestrationMap.entrySet())
287 String mapKey = entry.getKey();
288 if("serviceInstanceId".equalsIgnoreCase(mapKey)) {
289 mapKey = "serviceInstanceId";
290 } else if("serviceInstanceName".equalsIgnoreCase(mapKey)) {
291 mapKey = "serviceInstanceName";
292 } else if("vnfInstanceId".equalsIgnoreCase(mapKey)){
294 } else if("vnfInstanceName".equalsIgnoreCase(mapKey)) {
296 } else if("vfModuleInstanceId".equalsIgnoreCase(mapKey)) {
297 mapKey = "vfModuleId";
298 } else if("vfModuleInstanceName".equalsIgnoreCase(mapKey)) {
299 mapKey = "vfModuleName";
300 } else if("volumeGroupInstanceId".equalsIgnoreCase(mapKey)) {
301 mapKey = "volumeGroupId";
302 } else if("volumeGroupInstanceName".equalsIgnoreCase(mapKey)) {
303 mapKey = "volumeGroupName";
304 } else if("networkInstanceId".equalsIgnoreCase(mapKey)) {
305 mapKey = "networkId";
306 } else if("networkInstanceName".equalsIgnoreCase(mapKey)) {
307 mapKey = "networkName";
308 } else if("lcpCloudRegionId".equalsIgnoreCase(mapKey)) {
309 mapKey = "aicCloudRegion";
310 } else if("tenantId".equalsIgnoreCase(mapKey)) {
312 } else if("modelType".equalsIgnoreCase(mapKey)) {
313 mapKey = "requestScope";
314 } else if("requestorId".equalsIgnoreCase(mapKey)) {
315 mapKey = "requestorId";
316 } else if("requestExecutionDate".equalsIgnoreCase(mapKey)) {
317 mapKey = "startTime";
320 String propertyValue = entry.getValue().get(1);
321 if ("startTime".equals(mapKey)) {
322 SimpleDateFormat format = new SimpleDateFormat("MM-dd-yyyy");
324 Date thisDate = format.parse(propertyValue);
325 Timestamp minTime = new Timestamp(thisDate.getTime());
326 Timestamp maxTime = new Timestamp(thisDate.getTime() + TimeUnit.DAYS.toMillis(1));
328 if("DOES_NOT_EQUAL".equalsIgnoreCase(entry.getValue().get(0))) {
329 criteria.add(Restrictions.or(Restrictions.lt(mapKey, minTime),
330 Restrictions.ge(mapKey, maxTime)));
332 criteria.add(Restrictions.between(mapKey, minTime, maxTime));
336 msoLogger.debug("Exception in getOrchestrationFiltersFromInfraActive(): + " + e.getMessage(), e);
340 else if("DOES_NOT_EQUAL".equalsIgnoreCase(entry.getValue().get(0))) {
341 criteria.add(Restrictions.ne(mapKey, propertyValue));
343 criteria.add(Restrictions.eq(mapKey, propertyValue));
348 Order order = Order.asc (START_TIME);
350 return executeInfraQuery (criteria, order);
354 public List <InfraActiveRequests> getRequestListFromInfraActive (String queryAttributeName,
356 String requestType) {
357 msoLogger.debug ("Get list of infra requests from DB with " + queryAttributeName + " = " + queryValue);
359 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
361 session.beginTransaction ();
362 Criteria crit = session.createCriteria (InfraActiveRequests.class)
363 .add (Restrictions.eq (queryAttributeName, queryValue));
364 crit.add (Restrictions.eqOrIsNull (REQUEST_TYPE, requestType));
365 crit.addOrder (Order.desc (START_TIME));
366 crit.addOrder (Order.asc (SOURCE));
368 @SuppressWarnings("unchecked")
369 List <InfraActiveRequests> arList = crit.list ();
370 if (arList != null && !arList.isEmpty ()) {
374 if (session != null && session.isOpen ()) {
377 // msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "getRequestListFromInfraActive", null);
383 public InfraActiveRequests getRequestFromInfraActive (String requestId, String requestType) {
384 long startTime = System.currentTimeMillis ();
385 msoLogger.debug ("Get infra request from DB with id " + requestId);
387 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
388 InfraActiveRequests ar = null;
390 session.beginTransaction ();
391 Query query = session.createQuery ("from InfraActiveRequests where (requestId = :requestId OR clientRequestId = :requestId) and requestType = :requestType");
392 query.setParameter (REQUEST_ID, requestId);
393 query.setParameter (REQUEST_TYPE, requestType);
394 ar = (InfraActiveRequests) query.uniqueResult ();
396 if (session != null && session.isOpen ()) {
399 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "getRequestFromInfraActive", null);
405 public InfraActiveRequests checkDuplicateByVnfName (String vnfName, String action, String requestType) {
407 long startTime = System.currentTimeMillis ();
408 msoLogger.debug ("Get infra request from DB for VNF " + vnfName + " and action " + action + " and requestType " + requestType);
410 InfraActiveRequests ar = null;
411 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
414 session.beginTransaction ();
415 Query query = session.createQuery ("from InfraActiveRequests where vnfName = :vnfName and action = :action and (requestStatus = 'PENDING' or requestStatus = 'IN_PROGRESS' or requestStatus = 'TIMEOUT') and requestType = :requestType ORDER BY startTime DESC");
416 query.setParameter ("vnfName", vnfName);
417 query.setParameter ("action", action);
418 query.setParameter (REQUEST_TYPE, requestType);
419 @SuppressWarnings("unchecked")
420 List <InfraActiveRequests> results = query.list ();
421 if (!results.isEmpty ()) {
422 ar = results.get (0);
425 if (session != null && session.isOpen ()) {
428 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "checkDuplicateByVnfName", null);
434 public InfraActiveRequests checkDuplicateByVnfId (String vnfId, String action, String requestType) {
436 long startTime = System.currentTimeMillis ();
437 msoLogger.debug ("Get list of infra requests from DB for VNF " + vnfId + " and action " + action);
439 InfraActiveRequests ar = null;
440 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
443 session.beginTransaction ();
444 Query query = session.createQuery ("from InfraActiveRequests where vnfId = :vnfId and action = :action and (requestStatus = 'PENDING' or requestStatus = 'IN_PROGRESS' or requestStatus = 'TIMEOUT') and requestType = :requestType ORDER BY startTime DESC");
445 query.setParameter ("vnfId", vnfId);
446 query.setParameter ("action", action);
447 query.setParameter (REQUEST_TYPE, requestType);
448 @SuppressWarnings("unchecked")
449 List <InfraActiveRequests> results = query.list ();
450 if (!results.isEmpty ()) {
451 ar = results.get (0);
454 if (session != null && session.isOpen ()) {
457 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "checkDuplicateByVnfId", null);
463 public void setMockDB(MockRequestsDatabase mockDB) {
464 RequestsDatabase.mockDB = mockDB;
468 * Fetch a specific SiteStatus by SiteName.
470 * @param siteName The unique name of the site
471 * @return SiteStatus object or null if none found
473 public SiteStatus getSiteStatus (String siteName) {
474 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
476 SiteStatus siteStatus = null;
477 msoLogger.debug ("Request database - get Site Status with Site name:" + siteName);
479 String hql = "FROM SiteStatus WHERE siteName = :site_name";
480 Query query = session.createQuery (hql);
481 query.setParameter ("site_name", siteName);
483 siteStatus = (SiteStatus) query.uniqueResult ();
485 if (session != null && session.isOpen ()) {
488 msoLogger.debug ("getSiteStatus - Successfully: " + siteStatus);
494 * Fetch a specific SiteStatus by SiteName.
496 * @param siteName The unique name of the site
497 * @param status The updated status of the Site
499 public void updateSiteStatus (String siteName, boolean status) {
500 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
501 session.beginTransaction ();
503 long startTime = System.currentTimeMillis ();
504 msoLogger.debug ("Request database - save Site Status with Site name:" + siteName);
506 String hql = "FROM SiteStatus WHERE siteName = :site_name";
507 Query query = session.createQuery (hql);
508 query.setParameter ("site_name", siteName);
510 SiteStatus siteStatus = (SiteStatus) query.uniqueResult ();
511 if (siteStatus == null) {
512 siteStatus = new SiteStatus ();
513 siteStatus.setSiteName (siteName);
514 siteStatus.setStatus (status);
515 //siteStatus.setCreated(new Timestamp(new Date().getTime()));
516 session.save (siteStatus);
518 siteStatus.setStatus(status);
519 //siteStatus.setCreated(new Timestamp(new Date().getTime()));
520 session.merge (siteStatus);
522 session.getTransaction ().commit ();
525 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "updateSiteStatus", null);
530 * get the operation progress
533 * @param serviceId the serviceId
534 * @param operationId the operation id
535 * @return current progress of the operation
536 * @since ONAP Amsterdam Release
538 public OperationStatus getOperationStatus(String serviceId, String operationId) {
540 long startTime = System.currentTimeMillis();
541 msoLogger.debug("Execute query on infra active request table");
543 OperationStatus operStatus = null;
544 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
546 session.beginTransaction();
547 String hql = "FROM OperationStatus WHERE SERVICE_ID = :service_id and OPERATION_ID = :operation_id";
548 Query query = session.createQuery(hql);
549 query.setParameter("service_id", serviceId);
550 query.setParameter("operation_id", operationId);
551 operStatus = (OperationStatus)query.uniqueResult();
554 if(session != null && session.isOpen()) {
557 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
558 "Successfully", "RequestDB", "getOperationStatus", null);
564 * get the operation progress
567 * @param serviceId the serviceId
568 * @return current progress of the operation
569 * @since ONAP Amsterdam Release
571 public OperationStatus getOperationStatusByServiceId(String serviceId) {
573 long startTime = System.currentTimeMillis();
574 msoLogger.debug("Execute query on infra active request table");
576 OperationStatus operStatus = null;
577 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
579 session.beginTransaction();
580 String hql = "FROM OperationStatus WHERE SERVICE_ID = :service_id";
581 Query query = session.createQuery(hql);
582 query.setParameter("service_id", serviceId);
583 operStatus = (OperationStatus)query.uniqueResult();
586 if(session != null && session.isOpen()) {
589 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
590 "Successfully", "RequestDB", "getOperationStatus", null);
596 * get the operation progress
599 * @param serviceName the serviceName
600 * @return current progress of the operation
601 * @since ONAP Amsterdam Release
603 public OperationStatus getOperationStatusByServiceName(String serviceName) {
605 long startTime = System.currentTimeMillis();
606 msoLogger.debug("Execute query on infra active request table");
608 OperationStatus operStatus = null;
609 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
611 session.beginTransaction();
612 String hql = "FROM OperationStatus WHERE SERVICE_NAME = :service_name";
613 Query query = session.createQuery(hql);
614 query.setParameter("service_name", serviceName);
615 operStatus = (OperationStatus)query.uniqueResult();
618 if(session != null && session.isOpen()) {
621 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
622 "Successfully", "RequestDB", "getOperationStatus", null);
628 * update the operation status
631 * @param operstatus the operation object
632 * @since ONAP Amsterdam Release
634 public void updateOperationStatus(OperationStatus operstatus) {
635 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
636 session.beginTransaction();
638 long startTime = System.currentTimeMillis();
639 msoLogger.debug("Request database - save Operation Status with service Id:" + operstatus.getServiceId()
640 + ", operationId:" + operstatus.getOperationId());
643 "FROM OperationStatus WHERE SERVICE_ID = :service_id and OPERATION_ID = :operation_id";
644 Query query = session.createQuery(hql);
645 query.setParameter("service_id", operstatus.getServiceId());
646 query.setParameter("operation_id", operstatus.getOperationId());
647 OperationStatus exsitingStatus = (OperationStatus)query.uniqueResult();
648 if(exsitingStatus == null) {
649 session.save(operstatus);
651 session.merge(operstatus);
653 session.getTransaction().commit();
656 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
657 "Successfully", "RequestDB", "updateOperationStatus", null);
662 * get a operation status of a resource
665 * @param serviceId the service Id
666 * @param operationId the operation id
667 * @param resourceTemplateUUID the resource template uuid
668 * @return the progress status of a resource
669 * @since ONAP Amsterdam Release
671 public ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId,
672 String resourceTemplateUUID) {
673 long startTime = System.currentTimeMillis();
674 msoLogger.debug("Execute query on infra active request table");
676 ResourceOperationStatus operStatus = null;
677 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
679 session.beginTransaction();
681 "FROM ResourceOperationStatus WHERE serviceId = :service_id and operationId = :operation_id and resourceTemplateUUID= :uuid";
682 Query query = session.createQuery(hql);
683 query.setParameter("service_id", serviceId);
684 query.setParameter("operation_id", operationId);
685 query.setParameter("uuid", resourceTemplateUUID);
686 operStatus = (ResourceOperationStatus)query.uniqueResult();
689 if(session != null && session.isOpen()) {
692 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
693 "Successfully", "RequestDB", "getOperationStatus", null);
699 * update the resource operation
702 * @param operStatus the resource operation object
703 * @since ONAP Amsterdam Release
705 public void updateResOperStatus(ResourceOperationStatus operStatus) {
706 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
707 session.beginTransaction();
709 long startTime = System.currentTimeMillis();
710 msoLogger.debug("Request database - save Resource Operation Status with service Id:" + operStatus.getServiceId()
711 + ", operationId:" + operStatus.getOperationId() + ", resourceUUId:"
712 + operStatus.getResourceTemplateUUID());
715 "FROM ResourceOperationStatus WHERE SERVICE_ID = :service_id and OPERATION_ID = :operation_id and RESOURCE_TEMPLATE_UUID = :res_uuid";
716 Query query = session.createQuery(hql);
717 query.setParameter("service_id", operStatus.getServiceId());
718 query.setParameter("operation_id", operStatus.getOperationId());
719 query.setParameter("res_uuid", operStatus.getResourceTemplateUUID());
720 ResourceOperationStatus exsitingStatus = (ResourceOperationStatus)query.uniqueResult();
721 if(exsitingStatus == null) {
722 session.save(operStatus);
724 session.merge(operStatus);
726 session.getTransaction().commit();
729 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
730 "Successfully", "RequestDB", "updateResOperStatus", null);
732 updateOperationStatusBasedOnResourceStatus(operStatus);
736 * update service operation status when a operation resource status updated
739 * @param operStatus the resource operation status
740 * @since ONAP Amsterdam Release
742 private void updateOperationStatusBasedOnResourceStatus(ResourceOperationStatus operStatus) {
743 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
744 session.beginTransaction();
746 long startTime = System.currentTimeMillis();
747 msoLogger.debug("Request database - query Resource Operation Status with service Id:"
748 + operStatus.getServiceId() + ", operationId:" + operStatus.getOperationId());
750 // query all resources of the service
751 String hql = "FROM ResourceOperationStatus WHERE SERVICE_ID = :service_id and OPERATION_ID = :operation_id";
752 Query query = session.createQuery(hql);
753 query.setParameter("service_id", operStatus.getServiceId());
754 query.setParameter("operation_id", operStatus.getOperationId());
755 @SuppressWarnings("unchecked")
756 List<ResourceOperationStatus> lstResourceStatus = (List<ResourceOperationStatus>)query.list();
757 // count the total progress
758 int resourceCount = lstResourceStatus.size();
760 boolean isFinished = true;
761 for (ResourceOperationStatus lstResourceStatu : lstResourceStatus) {
762 progress = progress + Integer.valueOf(lstResourceStatu.getProgress()) / resourceCount;
763 if (Status.PROCESSING.equals(lstResourceStatu.getStatus())) {
767 OperationStatus serviceOperStatus =
768 getOperationStatus(operStatus.getServiceId(), operStatus.getOperationId());
769 progress = progress > 100 ? 100 : progress;
770 serviceOperStatus.setProgress(String.valueOf(progress));
771 serviceOperStatus.setOperationContent(operStatus.getStatusDescription());
772 // if current resource failed. service failed.
773 if(RequestsDbConstant.Status.ERROR.equals(operStatus.getStatus())) {
774 serviceOperStatus.setResult(RequestsDbConstant.Status.ERROR);
775 serviceOperStatus.setReason(operStatus.getStatusDescription());
776 } else if(isFinished) {
778 serviceOperStatus.setResult(RequestsDbConstant.Status.FINISHED);
779 serviceOperStatus.setProgress(RequestsDbConstant.Progress.ONE_HUNDRED);
781 updateOperationStatus(serviceOperStatus);
784 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
785 "Successfully", "RequestDB", "updateResOperStatus", null);