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.RequestsDbSessionFactoryManager;
42 import org.openecomp.mso.logger.MsoLogger;
44 public class RequestsDatabase {
46 protected final AbstractSessionFactoryManager sessionFactoryRequestDB;
48 protected static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.GENERAL);
50 protected static final String SOURCE = "source";
51 protected static final String START_TIME = "startTime";
52 protected static final String REQUEST_TYPE = "requestType";
53 protected static final String SERVICE_INSTANCE_ID = "serviceInstanceId";
54 protected static final String SERVICE_INSTANCE_NAME = "serviceInstanceName";
55 protected static final String VNF_INSTANCE_NAME = "vnfName";
56 protected static final String VNF_INSTANCE_ID = "vnfId";
57 protected static final String VOLUME_GROUP_INSTANCE_NAME = "volumeGroupName";
58 protected static final String VOLUME_GROUP_INSTANCE_ID = "volumeGroupId";
59 protected static final String VFMODULE_INSTANCE_NAME = "vfModuleName";
60 protected static final String VFMODULE_INSTANCE_ID = "vfModuleId";
61 protected static final String NETWORK_INSTANCE_NAME = "networkName";
62 protected static final String NETWORK_INSTANCE_ID = "networkId";
63 protected static final String GLOBAL_SUBSCRIBER_ID = "globalSubscriberId";
64 protected static final String SERVICE_NAME_VERSION_ID = "serviceNameVersionId";
65 protected static final String SERVICE_ID = "serviceId";
66 protected static final String SERVICE_VERSION = "serviceVersion";
68 protected static final String REQUEST_ID = "requestId";
69 protected static MockRequestsDatabase mockDB = null;
71 public static RequestsDatabase getInstance() {
72 return new RequestsDatabase(new RequestsDbSessionFactoryManager ());
75 protected RequestsDatabase (AbstractSessionFactoryManager sessionFactoryRequest) {
76 sessionFactoryRequestDB = sessionFactoryRequest;
79 public boolean healthCheck () {
80 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
82 Query query = session.createSQLQuery (" show tables ");
84 List<?> list = query.list();
87 if (session != null && session.isOpen ()) {
95 public int updateInfraStatus (String requestId, String requestStatus, String lastModifiedBy) {
96 long startTime = System.currentTimeMillis ();
97 msoLogger.debug ("Update infra request record " + requestId + " with status " + requestStatus);
98 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
102 session.beginTransaction ();
103 Query query = session.createQuery ("update InfraActiveRequests set requestStatus = :requestStatus, modifyTime = :modifyTime, lastModifiedBy = :lastModifiedBy where requestId = :requestId ");
104 query.setParameter ("requestStatus", requestStatus);
105 query.setParameter (REQUEST_ID, requestId);
106 query.setParameter ("lastModifiedBy", lastModifiedBy);
107 Timestamp modifyTimeStamp = new Timestamp (System.currentTimeMillis());
108 query.setParameter ("modifyTime", modifyTimeStamp);
109 result = query.executeUpdate ();
110 session.getTransaction ().commit ();
112 if (session != null && session.isOpen ()) {
115 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "updateInfraStatus", null);
120 public int updateInfraStatus (String requestId, String requestStatus, long progress, String lastModifiedBy) {
121 long startTime = System.currentTimeMillis ();
122 msoLogger.debug ("Update infra request record " + requestId + " with status " + requestStatus);
123 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
127 session.beginTransaction ();
128 Query query = session.createQuery ("update InfraActiveRequests set requestStatus = :requestStatus, modifyTime = :modifyTime, progress = :progress, lastModifiedBy = :lastModifiedBy where requestId = :requestId ");
129 query.setParameter ("requestStatus", requestStatus);
130 query.setParameter (REQUEST_ID, requestId);
131 query.setParameter ("progress", progress);
132 query.setParameter ("lastModifiedBy", lastModifiedBy);
133 Timestamp modifyTimeStamp = new Timestamp (System.currentTimeMillis());
134 query.setParameter ("modifyTime", modifyTimeStamp);
135 result = query.executeUpdate ();
136 session.getTransaction ().commit ();
138 if (session != null && session.isOpen ()) {
141 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "updateInfraStatus", null);
146 public int updateInfraFinalStatus (String requestId, String requestStatus, String statusMessage, long progress, String responseBody, String lastModifiedBy) {
147 long startTime = System.currentTimeMillis ();
148 msoLogger.debug ("Update infra request record " + requestId + " with status " + requestStatus);
149 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
153 session.beginTransaction ();
154 Query query = session.createQuery ("update InfraActiveRequests set requestStatus = :requestStatus, statusMessage = :statusMessage, progress = :progress, endTime = :endTime, responseBody = :responseBody, lastModifiedBy = :lastModifiedBy where id.requestId = :requestId ");
155 query.setParameter ("requestStatus", requestStatus);
156 query.setParameter ("requestId", requestId);
157 Timestamp endTimeStamp = new Timestamp (System.currentTimeMillis());
158 query.setParameter ("endTime", endTimeStamp);
159 query.setParameter ("statusMessage", statusMessage);
160 query.setParameter ("progress", progress);
161 query.setParameter ("responseBody", responseBody);
162 query.setParameter ("lastModifiedBy", lastModifiedBy);
163 result = query.executeUpdate ();
164 session.getTransaction ().commit ();
166 if (session != null && session.isOpen ()) {
169 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "updateInfraFinalStatus", null);
175 private List<InfraActiveRequests> executeInfraQuery (List <Criterion> criteria, Order order) {
177 long startTime = System.currentTimeMillis ();
178 msoLogger.debug ("Execute query on infra active request table");
180 List <InfraActiveRequests> results = new ArrayList<InfraActiveRequests>();
182 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
184 session.beginTransaction ();
185 Criteria crit = session.createCriteria (InfraActiveRequests.class);
186 for (Criterion criterion : criteria) {
187 crit.add (criterion);
189 crit.addOrder (order);
191 // @SuppressWarnings("unchecked")
192 results = crit.list ();
195 if (session != null && session.isOpen ()) {
198 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "getInfraActiveRequest", null);
203 public InfraActiveRequests getRequestFromInfraActive (String requestId) {
204 long startTime = System.currentTimeMillis ();
205 msoLogger.debug ("Get request " + requestId + " from InfraActiveRequests DB");
207 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
208 InfraActiveRequests ar = null;
210 session.beginTransaction ();
211 Query query = session.createQuery ("from InfraActiveRequests where requestId = :requestId OR clientRequestId = :requestId");
212 query.setParameter (REQUEST_ID, requestId);
213 ar = (InfraActiveRequests) query.uniqueResult ();
215 if (session != null && session.isOpen ()) {
218 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "InfraRequestDB", "getRequestFromInfraActive", null);
223 public InfraActiveRequests checkInstanceNameDuplicate (HashMap<String,String> instanceIdMap, String instanceName, String requestScope) {
225 List <Criterion> criteria = new LinkedList <> ();
227 if(instanceName != null && !instanceName.equals("")) {
229 if(requestScope.equals("service")){
230 criteria.add (Restrictions.eq (SERVICE_INSTANCE_NAME, instanceName));
231 } else if(requestScope.equals("vnf")){
232 criteria.add (Restrictions.eq (VNF_INSTANCE_NAME, instanceName));
233 } else if(requestScope.equals("volumeGroup")){
234 criteria.add (Restrictions.eq (VOLUME_GROUP_INSTANCE_NAME, instanceName));
235 } else if(requestScope.equals("vfModule")){
236 criteria.add (Restrictions.eq (VFMODULE_INSTANCE_NAME, instanceName));
237 } else if(requestScope.equals("network")){
238 criteria.add (Restrictions.eq (NETWORK_INSTANCE_NAME, instanceName));
242 if(instanceIdMap != null){
243 if(requestScope.equals("service") && instanceIdMap.get("serviceInstanceId") != null){
244 criteria.add (Restrictions.eq (SERVICE_INSTANCE_ID, instanceIdMap.get("serviceInstanceId")));
247 if(requestScope.equals("vnf") && instanceIdMap.get("vnfInstanceId") != null){
248 criteria.add (Restrictions.eq (VNF_INSTANCE_ID, instanceIdMap.get("vnfInstanceId")));
251 if(requestScope.equals("vfModule") && instanceIdMap.get("vfModuleInstanceId") != null){
252 criteria.add (Restrictions.eq (VFMODULE_INSTANCE_ID, instanceIdMap.get("vfModuleInstanceId")));
255 if(requestScope.equals("volumeGroup") && instanceIdMap.get("volumeGroupInstanceId") != null){
256 criteria.add (Restrictions.eq (VOLUME_GROUP_INSTANCE_ID, instanceIdMap.get("volumeGroupInstanceId")));
259 if(requestScope.equals("network") && instanceIdMap.get("networkInstanceId") != null){
260 criteria.add (Restrictions.eq (NETWORK_INSTANCE_ID, instanceIdMap.get("networkInstanceId")));
265 criteria.add (Restrictions.in ("requestStatus", new String[] { "PENDING", "IN_PROGRESS", "TIMEOUT" }));
267 Order order = Order.desc (START_TIME);
269 List<InfraActiveRequests> dupList = executeInfraQuery(criteria, order);
271 InfraActiveRequests infraActiveRequests = null;
273 if(dupList != null && dupList.size() > 0){
274 infraActiveRequests = dupList.get(0);
277 return infraActiveRequests;
280 public List<InfraActiveRequests> getOrchestrationFiltersFromInfraActive (Map<String, List<String>> orchestrationMap) {
283 List <Criterion> criteria = new LinkedList <> ();
284 for (Map.Entry<String, List<String>> entry : orchestrationMap.entrySet())
286 String mapKey = entry.getKey();
287 if(mapKey.equalsIgnoreCase("serviceInstanceId")) {
288 mapKey = "serviceInstanceId";
289 } else if(mapKey.equalsIgnoreCase("serviceInstanceName")) {
290 mapKey = "serviceInstanceName";
291 } else if(mapKey.equalsIgnoreCase("vnfInstanceId")){
293 } else if(mapKey.equalsIgnoreCase("vnfInstanceName")) {
295 } else if(mapKey.equalsIgnoreCase("vfModuleInstanceId")) {
296 mapKey = "vfModuleId";
297 } else if(mapKey.equalsIgnoreCase("vfModuleInstanceName")) {
298 mapKey = "vfModuleName";
299 } else if(mapKey.equalsIgnoreCase("volumeGroupInstanceId")) {
300 mapKey = "volumeGroupId";
301 } else if(mapKey.equalsIgnoreCase("volumeGroupInstanceName")) {
302 mapKey = "volumeGroupName";
303 } else if(mapKey.equalsIgnoreCase("networkInstanceId")) {
304 mapKey = "networkId";
305 } else if(mapKey.equalsIgnoreCase("networkInstanceName")) {
306 mapKey = "networkName";
307 } else if(mapKey.equalsIgnoreCase("lcpCloudRegionId")) {
308 mapKey = "aicCloudRegion";
309 } else if(mapKey.equalsIgnoreCase("tenantId")) {
311 } else if(mapKey.equalsIgnoreCase("modelType")) {
312 mapKey = "requestScope";
313 } else if(mapKey.equalsIgnoreCase("requestorId")) {
314 mapKey = "requestorId";
315 } else if(mapKey.equalsIgnoreCase("requestExecutionDate")) {
316 mapKey = "startTime";
319 String propertyValue = entry.getValue().get(1);
320 if (mapKey.equals("startTime")) {
321 SimpleDateFormat format = new SimpleDateFormat("MM-dd-yyyy");
323 Date thisDate = format.parse(propertyValue);
324 Timestamp minTime = new Timestamp(thisDate.getTime());
325 Timestamp maxTime = new Timestamp(thisDate.getTime() + TimeUnit.DAYS.toMillis(1));
327 if("DOES_NOT_EQUAL".equalsIgnoreCase(entry.getValue().get(0))) {
328 criteria.add(Restrictions.or(Restrictions.lt(mapKey, minTime),
329 Restrictions.ge(mapKey, maxTime)));
331 criteria.add(Restrictions.between(mapKey, minTime, maxTime));
335 msoLogger.debug("Exception in getOrchestrationFiltersFromInfraActive(): + " + e.getMessage(), e);
339 else if("DOES_NOT_EQUAL".equalsIgnoreCase(entry.getValue().get(0))) {
340 criteria.add(Restrictions.ne(mapKey, propertyValue));
342 criteria.add(Restrictions.eq(mapKey, propertyValue));
347 Order order = Order.asc (START_TIME);
349 return executeInfraQuery (criteria, order);
353 public List <InfraActiveRequests> getRequestListFromInfraActive (String queryAttributeName,
355 String requestType) {
356 msoLogger.debug ("Get list of infra requests from DB with " + queryAttributeName + " = " + queryValue);
358 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
360 session.beginTransaction ();
361 Criteria crit = session.createCriteria (InfraActiveRequests.class)
362 .add (Restrictions.eq (queryAttributeName, queryValue));
363 crit.add (Restrictions.eqOrIsNull (REQUEST_TYPE, requestType));
364 crit.addOrder (Order.desc (START_TIME));
365 crit.addOrder (Order.asc (SOURCE));
367 @SuppressWarnings("unchecked")
368 List <InfraActiveRequests> arList = crit.list ();
369 if (arList != null && !arList.isEmpty ()) {
373 if (session != null && session.isOpen ()) {
376 // msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "getRequestListFromInfraActive", null);
382 public InfraActiveRequests getRequestFromInfraActive (String requestId, String requestType) {
383 long startTime = System.currentTimeMillis ();
384 msoLogger.debug ("Get infra request from DB with id " + requestId);
386 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
387 InfraActiveRequests ar = null;
389 session.beginTransaction ();
390 Query query = session.createQuery ("from InfraActiveRequests where (requestId = :requestId OR clientRequestId = :requestId) and requestType = :requestType");
391 query.setParameter (REQUEST_ID, requestId);
392 query.setParameter (REQUEST_TYPE, requestType);
393 ar = (InfraActiveRequests) query.uniqueResult ();
395 if (session != null && session.isOpen ()) {
398 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "getRequestFromInfraActive", null);
404 public InfraActiveRequests checkDuplicateByVnfName (String vnfName, String action, String requestType) {
406 long startTime = System.currentTimeMillis ();
407 msoLogger.debug ("Get infra request from DB for VNF " + vnfName + " and action " + action + " and requestType " + requestType);
409 InfraActiveRequests ar = null;
410 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
413 session.beginTransaction ();
414 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");
415 query.setParameter ("vnfName", vnfName);
416 query.setParameter ("action", action);
417 query.setParameter (REQUEST_TYPE, requestType);
418 @SuppressWarnings("unchecked")
419 List <InfraActiveRequests> results = query.list ();
420 if (!results.isEmpty ()) {
421 ar = results.get (0);
424 if (session != null && session.isOpen ()) {
427 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "checkDuplicateByVnfName", null);
433 public InfraActiveRequests checkDuplicateByVnfId (String vnfId, String action, String requestType) {
435 long startTime = System.currentTimeMillis ();
436 msoLogger.debug ("Get list of infra requests from DB for VNF " + vnfId + " and action " + action);
438 InfraActiveRequests ar = null;
439 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
442 session.beginTransaction ();
443 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");
444 query.setParameter ("vnfId", vnfId);
445 query.setParameter ("action", action);
446 query.setParameter (REQUEST_TYPE, requestType);
447 @SuppressWarnings("unchecked")
448 List <InfraActiveRequests> results = query.list ();
449 if (!results.isEmpty ()) {
450 ar = results.get (0);
453 if (session != null && session.isOpen ()) {
456 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "checkDuplicateByVnfId", null);
462 public void setMockDB(MockRequestsDatabase mockDB) {
463 RequestsDatabase.mockDB = mockDB;
467 * Fetch a specific SiteStatus by SiteName.
469 * @param siteName The unique name of the site
470 * @return SiteStatus object or null if none found
472 public SiteStatus getSiteStatus (String siteName) {
473 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
475 SiteStatus siteStatus = null;
476 msoLogger.debug ("Request database - get Site Status with Site name:" + siteName);
478 String hql = "FROM SiteStatus WHERE siteName = :site_name";
479 Query query = session.createQuery (hql);
480 query.setParameter ("site_name", siteName);
482 siteStatus = (SiteStatus) query.uniqueResult ();
484 if (session != null && session.isOpen ()) {
487 msoLogger.debug ("getSiteStatus - Successfully: " + siteStatus);
493 * Fetch a specific SiteStatus by SiteName.
495 * @param siteName The unique name of the site
496 * @param status The updated status of the Site
498 public void updateSiteStatus (String siteName, boolean status) {
499 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
500 session.beginTransaction ();
502 long startTime = System.currentTimeMillis ();
503 msoLogger.debug ("Request database - save Site Status with Site name:" + siteName);
505 String hql = "FROM SiteStatus WHERE siteName = :site_name";
506 Query query = session.createQuery (hql);
507 query.setParameter ("site_name", siteName);
509 SiteStatus siteStatus = (SiteStatus) query.uniqueResult ();
510 if (siteStatus == null) {
511 siteStatus = new SiteStatus ();
512 siteStatus.setSiteName (siteName);
513 siteStatus.setStatus (status);
514 //siteStatus.setCreated(new Timestamp(new Date().getTime()));
515 session.save (siteStatus);
517 siteStatus.setStatus(status);
518 //siteStatus.setCreated(new Timestamp(new Date().getTime()));
519 session.merge (siteStatus);
521 session.getTransaction ().commit ();
524 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "updateSiteStatus", null);
529 * get the operation progress
532 * @param serviceId the serviceId
533 * @param operationId the operation id
534 * @return current progress of the operation
535 * @since ONAP Amsterdam Release
537 public OperationStatus getOperationStatus(String serviceId, String operationId) {
539 long startTime = System.currentTimeMillis();
540 msoLogger.debug("Execute query on infra active request table");
542 OperationStatus operStatus = null;
543 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
545 session.beginTransaction();
546 String hql = "FROM OperationStatus WHERE SERVICE_ID = :service_id and OPERATION_ID = :operation_id";
547 Query query = session.createQuery(hql);
548 query.setParameter("service_id", serviceId);
549 query.setParameter("operation_id", operationId);
550 operStatus = (OperationStatus)query.uniqueResult();
553 if(session != null && session.isOpen()) {
556 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
557 "Successfully", "RequestDB", "getOperationStatus", null);
563 * update the operation status
566 * @param operstatus the operation object
567 * @since ONAP Amsterdam Release
569 public void updateOperationStatus(OperationStatus operstatus) {
570 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
571 session.beginTransaction();
573 long startTime = System.currentTimeMillis();
574 msoLogger.debug("Request database - save Operation Status with service Id:" + operstatus.getServiceId()
575 + ", operationId:" + operstatus.getOperationId());
578 "FROM OperationStatus WHERE SERVICE_ID = :service_id and OPERATION_ID = :operation_id";
579 Query query = session.createQuery(hql);
580 query.setParameter("service_id", operstatus.getServiceId());
581 query.setParameter("operation_id", operstatus.getOperationId());
582 OperationStatus exsitingStatus = (OperationStatus)query.uniqueResult();
583 if(exsitingStatus == null) {
584 session.save(operstatus);
586 session.merge(operstatus);
588 session.getTransaction().commit();
591 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
592 "Successfully", "RequestDB", "updateOperationStatus", null);
597 * get a operation status of a resource
600 * @param serviceId the service Id
601 * @param operationId the operation id
602 * @param resourceTemplateUUID the resource template uuid
603 * @return the progress status of a resource
604 * @since ONAP Amsterdam Release
606 public ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId,
607 String resourceTemplateUUID) {
608 long startTime = System.currentTimeMillis();
609 msoLogger.debug("Execute query on infra active request table");
611 ResourceOperationStatus operStatus = null;
612 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
614 session.beginTransaction();
616 "FROM ResourceOperationStatus WHERE serviceId = :service_id and operationId = :operation_id and resourceTemplateUUID= :uuid";
617 Query query = session.createQuery(hql);
618 query.setParameter("service_id", serviceId);
619 query.setParameter("operation_id", operationId);
620 query.setParameter("uuid", resourceTemplateUUID);
621 operStatus = (ResourceOperationStatus)query.uniqueResult();
624 if(session != null && session.isOpen()) {
627 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
628 "Successfully", "RequestDB", "getOperationStatus", null);
634 * update the resource operation
637 * @param operstatus the resource operation object
638 * @since ONAP Amsterdam Release
640 public void updateResOperStatus(ResourceOperationStatus operStatus) {
641 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
642 session.beginTransaction();
644 long startTime = System.currentTimeMillis();
645 msoLogger.debug("Request database - save Resource Operation Status with service Id:" + operStatus.getServiceId()
646 + ", operationId:" + operStatus.getOperationId() + ", resourceUUId:"
647 + operStatus.getResourceTemplateUUID());
650 "FROM ResourceOperationStatus WHERE SERVICE_ID = :service_id and OPERATION_ID = :operation_id and RESOURCE_TEMPLATE_UUID = : res_uuid";
651 Query query = session.createQuery(hql);
652 query.setParameter("service_id", operStatus.getServiceId());
653 query.setParameter("operation_id", operStatus.getOperationId());
654 query.setParameter("res_uuid", operStatus.getResourceTemplateUUID());
655 ResourceOperationStatus exsitingStatus = (ResourceOperationStatus)query.uniqueResult();
656 if(exsitingStatus == null) {
657 session.save(operStatus);
659 session.merge(operStatus);
661 session.getTransaction().commit();
664 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
665 "Successfully", "RequestDB", "updateResOperStatus", null);
667 updateOperationStatusBasedOnResourceStatus(operStatus);
671 * update service operation status when a operation resource status updated
674 * @param operStatus the resource operation status
675 * @since ONAP Amsterdam Release
677 private void updateOperationStatusBasedOnResourceStatus(ResourceOperationStatus operStatus) {
678 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
679 session.beginTransaction();
681 long startTime = System.currentTimeMillis();
682 msoLogger.debug("Request database - query Resource Operation Status with service Id:"
683 + operStatus.getServiceId() + ", operationId:" + operStatus.getOperationId());
685 // query all resources of the service
686 String hql = "FROM ResourceOperationStatus WHERE SERVICE_ID = :service_id and OPERATION_ID = :operation_id";
687 Query query = session.createQuery(hql);
688 query.setParameter("service_id", operStatus.getServiceId());
689 query.setParameter("operation_id", operStatus.getOperationId());
690 @SuppressWarnings("unchecked")
691 List<ResourceOperationStatus> lstResourceStatus = (List<ResourceOperationStatus>)query.list();
692 // count the total progress
693 int resourceCount = lstResourceStatus.size();
695 boolean isFinished = true;
696 for(int i = 0; i < resourceCount; i++) {
697 progress = progress + Integer.valueOf(lstResourceStatus.get(i).getProgress()) / resourceCount;
698 if(RequestsDbConstant.Status.PROCESSING.equals(lstResourceStatus.get(i).getStatus())) {
702 OperationStatus serviceOperStatus =
703 getOperationStatus(operStatus.getServiceId(), operStatus.getOperationId());
704 progress = progress > 100 ? 100 : progress;
705 serviceOperStatus.setProgress(String.valueOf(progress));
706 serviceOperStatus.setOperationContent(operStatus.getStatusDescription());
707 // if current resource failed. service failed.
708 if(RequestsDbConstant.Status.ERROR.equals(operStatus.getStatus())) {
709 serviceOperStatus.setResult(RequestsDbConstant.Status.ERROR);
710 serviceOperStatus.setReason(operStatus.getStatusDescription());
711 } else if(isFinished) {
713 serviceOperStatus.setResult(RequestsDbConstant.Status.FINISHED);
714 serviceOperStatus.setProgress(RequestsDbConstant.Progress.ONE_HUNDRED);
716 updateOperationStatus(serviceOperStatus);
719 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
720 "Successfully", "RequestDB", "updateResOperStatus", null);