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.requestsdb;
23 import java.util.Date;
24 import java.sql.Timestamp;
25 import java.text.SimpleDateFormat;
26 import java.util.ArrayList;
27 import java.util.HashMap;
28 import java.util.LinkedList;
29 import java.util.List;
31 import java.util.concurrent.TimeUnit;
33 import org.hibernate.Criteria;
34 import org.hibernate.Query;
35 import org.hibernate.Session;
36 import org.hibernate.criterion.Criterion;
37 import org.hibernate.criterion.Order;
38 import org.hibernate.criterion.Restrictions;
39 import org.openecomp.mso.db.AbstractSessionFactoryManager;
40 import org.openecomp.mso.requestsdb.RequestsDbSessionFactoryManager;
41 import org.openecomp.mso.logger.MsoLogger;
43 public class RequestsDatabase {
45 protected final AbstractSessionFactoryManager sessionFactoryRequestDB;
47 protected static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.GENERAL);
49 protected static final String SOURCE = "source";
50 protected static final String START_TIME = "startTime";
51 protected static final String REQUEST_TYPE = "requestType";
52 protected static final String SERVICE_INSTANCE_ID = "serviceInstanceId";
53 protected static final String SERVICE_INSTANCE_NAME = "serviceInstanceName";
54 protected static final String VNF_INSTANCE_NAME = "vnfName";
55 protected static final String VNF_INSTANCE_ID = "vnfId";
56 protected static final String VOLUME_GROUP_INSTANCE_NAME = "volumeGroupName";
57 protected static final String VOLUME_GROUP_INSTANCE_ID = "volumeGroupId";
58 protected static final String VFMODULE_INSTANCE_NAME = "vfModuleName";
59 protected static final String VFMODULE_INSTANCE_ID = "vfModuleId";
60 protected static final String NETWORK_INSTANCE_NAME = "networkName";
61 protected static final String NETWORK_INSTANCE_ID = "networkId";
62 protected static final String GLOBAL_SUBSCRIBER_ID = "globalSubscriberId";
63 protected static final String SERVICE_NAME_VERSION_ID = "serviceNameVersionId";
64 protected static final String SERVICE_ID = "serviceId";
65 protected static final String SERVICE_VERSION = "serviceVersion";
67 protected static final String REQUEST_ID = "requestId";
68 protected static MockRequestsDatabase mockDB = null;
70 public static RequestsDatabase getInstance() {
71 return new RequestsDatabase(new RequestsDbSessionFactoryManager ());
74 protected RequestsDatabase (AbstractSessionFactoryManager sessionFactoryRequest) {
75 sessionFactoryRequestDB = sessionFactoryRequest;
78 public boolean healthCheck () {
79 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
81 Query query = session.createSQLQuery (" show tables ");
83 List<?> list = query.list();
86 if (session != null && session.isOpen ()) {
94 public int updateInfraStatus (String requestId, String requestStatus, String lastModifiedBy) {
95 long startTime = System.currentTimeMillis ();
96 msoLogger.debug ("Update infra request record " + requestId + " with status " + requestStatus);
97 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
101 session.beginTransaction ();
102 Query query = session.createQuery ("update InfraActiveRequests set requestStatus = :requestStatus, modifyTime = :modifyTime, lastModifiedBy = :lastModifiedBy where requestId = :requestId ");
103 query.setParameter ("requestStatus", requestStatus);
104 query.setParameter (REQUEST_ID, requestId);
105 query.setParameter ("lastModifiedBy", lastModifiedBy);
106 Timestamp modifyTimeStamp = new Timestamp (System.currentTimeMillis());
107 query.setParameter ("modifyTime", modifyTimeStamp);
108 result = query.executeUpdate ();
109 session.getTransaction ().commit ();
111 if (session != null && session.isOpen ()) {
114 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "updateInfraStatus", null);
119 public int updateInfraStatus (String requestId, String requestStatus, long progress, String lastModifiedBy) {
120 long startTime = System.currentTimeMillis ();
121 msoLogger.debug ("Update infra request record " + requestId + " with status " + requestStatus);
122 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
126 session.beginTransaction ();
127 Query query = session.createQuery ("update InfraActiveRequests set requestStatus = :requestStatus, modifyTime = :modifyTime, progress = :progress, lastModifiedBy = :lastModifiedBy where requestId = :requestId ");
128 query.setParameter ("requestStatus", requestStatus);
129 query.setParameter (REQUEST_ID, requestId);
130 query.setParameter ("progress", progress);
131 query.setParameter ("lastModifiedBy", lastModifiedBy);
132 Timestamp modifyTimeStamp = new Timestamp (System.currentTimeMillis());
133 query.setParameter ("modifyTime", modifyTimeStamp);
134 result = query.executeUpdate ();
135 session.getTransaction ().commit ();
137 if (session != null && session.isOpen ()) {
140 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "updateInfraStatus", null);
145 public int updateInfraFinalStatus (String requestId, String requestStatus, String statusMessage, long progress, String responseBody, String lastModifiedBy) {
146 long startTime = System.currentTimeMillis ();
147 msoLogger.debug ("Update infra request record " + requestId + " with status " + requestStatus);
148 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
152 session.beginTransaction ();
153 Query query = session.createQuery ("update InfraActiveRequests set requestStatus = :requestStatus, statusMessage = :statusMessage, progress = :progress, endTime = :endTime, responseBody = :responseBody, lastModifiedBy = :lastModifiedBy where id.requestId = :requestId ");
154 query.setParameter ("requestStatus", requestStatus);
155 query.setParameter ("requestId", requestId);
156 Timestamp endTimeStamp = new Timestamp (System.currentTimeMillis());
157 query.setParameter ("endTime", endTimeStamp);
158 query.setParameter ("statusMessage", statusMessage);
159 query.setParameter ("progress", progress);
160 query.setParameter ("responseBody", responseBody);
161 query.setParameter ("lastModifiedBy", lastModifiedBy);
162 result = query.executeUpdate ();
163 session.getTransaction ().commit ();
165 if (session != null && session.isOpen ()) {
168 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "updateInfraFinalStatus", null);
174 private List<InfraActiveRequests> executeInfraQuery (List <Criterion> criteria, Order order) {
176 long startTime = System.currentTimeMillis ();
177 msoLogger.debug ("Execute query on infra active request table");
179 List <InfraActiveRequests> results = new ArrayList<InfraActiveRequests>();
181 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
183 session.beginTransaction ();
184 Criteria crit = session.createCriteria (InfraActiveRequests.class);
185 for (Criterion criterion : criteria) {
186 crit.add (criterion);
188 crit.addOrder (order);
190 // @SuppressWarnings("unchecked")
191 results = crit.list ();
194 if (session != null && session.isOpen ()) {
197 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "getInfraActiveRequest", null);
202 public InfraActiveRequests getRequestFromInfraActive (String requestId) {
203 long startTime = System.currentTimeMillis ();
204 msoLogger.debug ("Get request " + requestId + " from InfraActiveRequests DB");
206 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
207 InfraActiveRequests ar = null;
209 session.beginTransaction ();
210 Query query = session.createQuery ("from InfraActiveRequests where requestId = :requestId OR clientRequestId = :requestId");
211 query.setParameter (REQUEST_ID, requestId);
212 ar = (InfraActiveRequests) query.uniqueResult ();
214 if (session != null && session.isOpen ()) {
217 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "InfraRequestDB", "getRequestFromInfraActive", null);
222 public InfraActiveRequests checkInstanceNameDuplicate (HashMap<String,String> instanceIdMap, String instanceName, String requestScope) {
224 List <Criterion> criteria = new LinkedList <> ();
226 if(instanceName != null && !instanceName.equals("")) {
228 if(requestScope.equals("service")){
229 criteria.add (Restrictions.eq (SERVICE_INSTANCE_NAME, instanceName));
230 } else if(requestScope.equals("vnf")){
231 criteria.add (Restrictions.eq (VNF_INSTANCE_NAME, instanceName));
232 } else if(requestScope.equals("volumeGroup")){
233 criteria.add (Restrictions.eq (VOLUME_GROUP_INSTANCE_NAME, instanceName));
234 } else if(requestScope.equals("vfModule")){
235 criteria.add (Restrictions.eq (VFMODULE_INSTANCE_NAME, instanceName));
236 } else if(requestScope.equals("network")){
237 criteria.add (Restrictions.eq (NETWORK_INSTANCE_NAME, instanceName));
241 if(instanceIdMap != null){
242 if(requestScope.equals("service") && instanceIdMap.get("serviceInstanceId") != null){
243 criteria.add (Restrictions.eq (SERVICE_INSTANCE_ID, instanceIdMap.get("serviceInstanceId")));
246 if(requestScope.equals("vnf") && instanceIdMap.get("vnfInstanceId") != null){
247 criteria.add (Restrictions.eq (VNF_INSTANCE_ID, instanceIdMap.get("vnfInstanceId")));
250 if(requestScope.equals("vfModule") && instanceIdMap.get("vfModuleInstanceId") != null){
251 criteria.add (Restrictions.eq (VFMODULE_INSTANCE_ID, instanceIdMap.get("vfModuleInstanceId")));
254 if(requestScope.equals("volumeGroup") && instanceIdMap.get("volumeGroupInstanceId") != null){
255 criteria.add (Restrictions.eq (VOLUME_GROUP_INSTANCE_ID, instanceIdMap.get("volumeGroupInstanceId")));
258 if(requestScope.equals("network") && instanceIdMap.get("networkInstanceId") != null){
259 criteria.add (Restrictions.eq (NETWORK_INSTANCE_ID, instanceIdMap.get("networkInstanceId")));
264 criteria.add (Restrictions.in ("requestStatus", new String[] { "PENDING", "IN_PROGRESS", "TIMEOUT" }));
266 Order order = Order.desc (START_TIME);
268 List<InfraActiveRequests> dupList = executeInfraQuery(criteria, order);
270 InfraActiveRequests infraActiveRequests = null;
272 if(dupList != null && dupList.size() > 0){
273 infraActiveRequests = dupList.get(0);
276 return infraActiveRequests;
279 public List<InfraActiveRequests> getOrchestrationFiltersFromInfraActive (Map<String, List<String>> orchestrationMap) {
282 List <Criterion> criteria = new LinkedList <> ();
283 for (Map.Entry<String, List<String>> entry : orchestrationMap.entrySet())
285 String mapKey = entry.getKey();
286 if(mapKey.equalsIgnoreCase("serviceInstanceId")) {
287 mapKey = "serviceInstanceId";
288 } else if(mapKey.equalsIgnoreCase("serviceInstanceName")) {
289 mapKey = "serviceInstanceName";
290 } else if(mapKey.equalsIgnoreCase("vnfInstanceId")){
292 } else if(mapKey.equalsIgnoreCase("vnfInstanceName")) {
294 } else if(mapKey.equalsIgnoreCase("vfModuleInstanceId")) {
295 mapKey = "vfModuleId";
296 } else if(mapKey.equalsIgnoreCase("vfModuleInstanceName")) {
297 mapKey = "vfModuleName";
298 } else if(mapKey.equalsIgnoreCase("volumeGroupInstanceId")) {
299 mapKey = "volumeGroupId";
300 } else if(mapKey.equalsIgnoreCase("volumeGroupInstanceName")) {
301 mapKey = "volumeGroupName";
302 } else if(mapKey.equalsIgnoreCase("networkInstanceId")) {
303 mapKey = "networkId";
304 } else if(mapKey.equalsIgnoreCase("networkInstanceName")) {
305 mapKey = "networkName";
306 } else if(mapKey.equalsIgnoreCase("lcpCloudRegionId")) {
307 mapKey = "aicCloudRegion";
308 } else if(mapKey.equalsIgnoreCase("tenantId")) {
310 } else if(mapKey.equalsIgnoreCase("modelType")) {
311 mapKey = "requestScope";
312 } else if(mapKey.equalsIgnoreCase("requestorId")) {
313 mapKey = "requestorId";
314 } else if(mapKey.equalsIgnoreCase("requestExecutionDate")) {
315 mapKey = "startTime";
318 String propertyValue = entry.getValue().get(1);
319 if (mapKey.equals("startTime")) {
320 SimpleDateFormat format = new SimpleDateFormat("MM-dd-yyyy");
322 Date thisDate = format.parse(propertyValue);
323 Timestamp minTime = new Timestamp(thisDate.getTime());
324 Timestamp maxTime = new Timestamp(thisDate.getTime() + TimeUnit.DAYS.toMillis(1));
326 if("DOES_NOT_EQUAL".equalsIgnoreCase(entry.getValue().get(0))) {
327 criteria.add(Restrictions.or(Restrictions.lt(mapKey, minTime),
328 Restrictions.ge(mapKey, maxTime)));
330 criteria.add(Restrictions.between(mapKey, minTime, maxTime));
334 msoLogger.debug("Exception in getOrchestrationFiltersFromInfraActive(): + " + e.getMessage());
338 else if("DOES_NOT_EQUAL".equalsIgnoreCase(entry.getValue().get(0))) {
339 criteria.add(Restrictions.ne(mapKey, propertyValue));
341 criteria.add(Restrictions.eq(mapKey, propertyValue));
346 Order order = Order.asc (START_TIME);
348 return executeInfraQuery (criteria, order);
352 public List <InfraActiveRequests> getRequestListFromInfraActive (String queryAttributeName,
354 String requestType) {
355 msoLogger.debug ("Get list of infra requests from DB with " + queryAttributeName + " = " + queryValue);
357 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
359 session.beginTransaction ();
360 Criteria crit = session.createCriteria (InfraActiveRequests.class)
361 .add (Restrictions.eq (queryAttributeName, queryValue));
362 crit.add (Restrictions.eqOrIsNull (REQUEST_TYPE, requestType));
363 crit.addOrder (Order.desc (START_TIME));
364 crit.addOrder (Order.asc (SOURCE));
366 @SuppressWarnings("unchecked")
367 List <InfraActiveRequests> arList = crit.list ();
368 if (arList != null && !arList.isEmpty ()) {
372 if (session != null && session.isOpen ()) {
375 // msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "getRequestListFromInfraActive", null);
381 public InfraActiveRequests getRequestFromInfraActive (String requestId, String requestType) {
382 long startTime = System.currentTimeMillis ();
383 msoLogger.debug ("Get infra request from DB with id " + requestId);
385 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
386 InfraActiveRequests ar = null;
388 session.beginTransaction ();
389 Query query = session.createQuery ("from InfraActiveRequests where (requestId = :requestId OR clientRequestId = :requestId) and requestType = :requestType");
390 query.setParameter (REQUEST_ID, requestId);
391 query.setParameter (REQUEST_TYPE, requestType);
392 ar = (InfraActiveRequests) query.uniqueResult ();
394 if (session != null && session.isOpen ()) {
397 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "getRequestFromInfraActive", null);
403 public InfraActiveRequests checkDuplicateByVnfName (String vnfName, String action, String requestType) {
405 long startTime = System.currentTimeMillis ();
406 msoLogger.debug ("Get infra request from DB for VNF " + vnfName + " and action " + action + " and requestType " + requestType);
408 InfraActiveRequests ar = null;
409 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
412 session.beginTransaction ();
413 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");
414 query.setParameter ("vnfName", vnfName);
415 query.setParameter ("action", action);
416 query.setParameter (REQUEST_TYPE, requestType);
417 @SuppressWarnings("unchecked")
418 List <InfraActiveRequests> results = query.list ();
419 if (!results.isEmpty ()) {
420 ar = results.get (0);
423 if (session != null && session.isOpen ()) {
426 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "checkDuplicateByVnfName", null);
432 public InfraActiveRequests checkDuplicateByVnfId (String vnfId, String action, String requestType) {
434 long startTime = System.currentTimeMillis ();
435 msoLogger.debug ("Get list of infra requests from DB for VNF " + vnfId + " and action " + action);
437 InfraActiveRequests ar = null;
438 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
441 session.beginTransaction ();
442 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");
443 query.setParameter ("vnfId", vnfId);
444 query.setParameter ("action", action);
445 query.setParameter (REQUEST_TYPE, requestType);
446 @SuppressWarnings("unchecked")
447 List <InfraActiveRequests> results = query.list ();
448 if (!results.isEmpty ()) {
449 ar = results.get (0);
452 if (session != null && session.isOpen ()) {
455 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "checkDuplicateByVnfId", null);
461 public void setMockDB(MockRequestsDatabase mockDB) {
462 RequestsDatabase.mockDB = mockDB;
466 * Fetch a specific SiteStatus by SiteName.
468 * @param siteName The unique name of the site
469 * @return SiteStatus object or null if none found
471 public SiteStatus getSiteStatus (String siteName) {
472 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
474 SiteStatus siteStatus = null;
475 msoLogger.debug ("Request database - get Site Status with Site name:" + siteName);
477 String hql = "FROM SiteStatus WHERE siteName = :site_name";
478 Query query = session.createQuery (hql);
479 query.setParameter ("site_name", siteName);
481 siteStatus = (SiteStatus) query.uniqueResult ();
483 if (session != null && session.isOpen ()) {
486 msoLogger.debug ("getSiteStatus - Successfully: " + siteStatus);
492 * Fetch a specific SiteStatus by SiteName.
494 * @param siteName The unique name of the site
495 * @param status The updated status of the Site
497 public void updateSiteStatus (String siteName, boolean status) {
498 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
499 session.beginTransaction ();
501 long startTime = System.currentTimeMillis ();
502 msoLogger.debug ("Request database - save Site Status with Site name:" + siteName);
504 String hql = "FROM SiteStatus WHERE siteName = :site_name";
505 Query query = session.createQuery (hql);
506 query.setParameter ("site_name", siteName);
508 SiteStatus siteStatus = (SiteStatus) query.uniqueResult ();
509 if (siteStatus == null) {
510 siteStatus = new SiteStatus ();
511 siteStatus.setSiteName (siteName);
512 siteStatus.setStatus (status);
513 //siteStatus.setCreated(new Timestamp(new Date().getTime()));
514 session.save (siteStatus);
516 siteStatus.setStatus(status);
517 //siteStatus.setCreated(new Timestamp(new Date().getTime()));
518 session.merge (siteStatus);
520 session.getTransaction ().commit ();
522 if (session != null && session.isOpen ()) {
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 * update the operation status
567 * @param operstatus the operation object
568 * @since ONAP Amsterdam Release
570 public void updateOperationStatus(OperationStatus operstatus) {
571 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
572 session.beginTransaction();
574 long startTime = System.currentTimeMillis();
575 msoLogger.debug("Request database - save Operation Status with service Id:" + operstatus.getServiceId()
576 + ", operationId:" + operstatus.getOperationId());
579 "FROM OperationStatus WHERE SERVICE_ID = :service_id and OPERATION_ID = :operation_id";
580 Query query = session.createQuery(hql);
581 query.setParameter("service_id", operstatus.getServiceId());
582 query.setParameter("operation_id", operstatus.getOperationId());
583 OperationStatus exsitingStatus = (OperationStatus)query.uniqueResult();
584 if(exsitingStatus == null) {
585 session.save(operstatus);
587 session.merge(operstatus);
589 session.getTransaction().commit();
591 if(session != null && session.isOpen()) {
594 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
595 "Successfully", "RequestDB", "updateOperationStatus", null);
600 * get a operation status of a resource
603 * @param serviceId the service Id
604 * @param operationId the operation id
605 * @param resourceTemplateUUID the resource template uuid
606 * @return the progress status of a resource
607 * @since ONAP Amsterdam Release
609 public ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId,
610 String resourceTemplateUUID) {
611 long startTime = System.currentTimeMillis();
612 msoLogger.debug("Execute query on infra active request table");
614 ResourceOperationStatus operStatus = null;
615 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
617 session.beginTransaction();
619 "FROM ResourceOperationStatus WHERE serviceId = :service_id and operationId = :operation_id and resourceTemplateUUID= :uuid";
620 Query query = session.createQuery(hql);
621 query.setParameter("service_id", serviceId);
622 query.setParameter("operation_id", operationId);
623 query.setParameter("uuid", resourceTemplateUUID);
624 operStatus = (ResourceOperationStatus)query.uniqueResult();
627 if(session != null && session.isOpen()) {
630 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
631 "Successfully", "RequestDB", "getOperationStatus", null);
637 * update the resource operation
640 * @param operstatus the resource operation object
641 * @since ONAP Amsterdam Release
643 public void updateResOperStatus(ResourceOperationStatus operStatus) {
644 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
645 session.beginTransaction();
647 long startTime = System.currentTimeMillis();
648 msoLogger.debug("Request database - save Resource Operation Status with service Id:" + operStatus.getServiceId()
649 + ", operationId:" + operStatus.getOperationId() + ", resourceUUId:"
650 + operStatus.getResourceTemplateUUID());
653 "FROM ResourceOperationStatus WHERE SERVICE_ID = :service_id and OPERATION_ID = :operation_id and RESOURCE_TEMPLATE_UUID = : res_uuid";
654 Query query = session.createQuery(hql);
655 query.setParameter("service_id", operStatus.getServiceId());
656 query.setParameter("operation_id", operStatus.getOperationId());
657 query.setParameter("res_uuid", operStatus.getResourceTemplateUUID());
658 ResourceOperationStatus exsitingStatus = (ResourceOperationStatus)query.uniqueResult();
659 if(exsitingStatus == null) {
660 session.save(operStatus);
662 session.merge(operStatus);
664 session.getTransaction().commit();
666 if(session != null && session.isOpen()) {
669 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
670 "Successfully", "RequestDB", "updateResOperStatus", null);
672 updateOperationStatusBasedOnResourceStatus(operStatus);
676 * update service operation status when a operation resource status updated
679 * @param operStatus the resource operation status
680 * @since ONAP Amsterdam Release
682 private void updateOperationStatusBasedOnResourceStatus(ResourceOperationStatus operStatus) {
683 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
684 session.beginTransaction();
686 long startTime = System.currentTimeMillis();
687 msoLogger.debug("Request database - query Resource Operation Status with service Id:"
688 + operStatus.getServiceId() + ", operationId:" + operStatus.getOperationId());
690 // query all resources of the service
691 String hql = "FROM ResourceOperationStatus WHERE SERVICE_ID = :service_id and OPERATION_ID = :operation_id";
692 Query query = session.createQuery(hql);
693 query.setParameter("service_id", operStatus.getServiceId());
694 query.setParameter("operation_id", operStatus.getOperationId());
695 @SuppressWarnings("unchecked")
696 List<ResourceOperationStatus> lstResourceStatus = (List<ResourceOperationStatus>)query.list();
697 // count the total progress
698 int resourceCount = lstResourceStatus.size();
700 boolean isFinished = true;
701 for(int i = 0; i < resourceCount; i++) {
702 progress = progress + Integer.valueOf(lstResourceStatus.get(i).getProgress()) / resourceCount;
703 if(RequestsDbConstant.Status.PROCESSING.equals(lstResourceStatus.get(i).getStatus())) {
707 OperationStatus serviceOperStatus =
708 getOperationStatus(operStatus.getServiceId(), operStatus.getOperationId());
709 progress = progress > 100 ? 100 : progress;
710 serviceOperStatus.setProgress(String.valueOf(progress));
711 serviceOperStatus.setOperationContent(operStatus.getStatusDescription());
712 // if current resource failed. service failed.
713 if(RequestsDbConstant.Status.ERROR.equals(operStatus.getStatus())) {
714 serviceOperStatus.setResult(RequestsDbConstant.Status.ERROR);
715 serviceOperStatus.setReason(operStatus.getStatusDescription());
716 } else if(isFinished) {
718 serviceOperStatus.setResult(RequestsDbConstant.Status.FINISHED);
719 serviceOperStatus.setProgress(RequestsDbConstant.Progress.ONE_HUNDRED);
721 updateOperationStatus(serviceOperStatus);
723 if(session != null && session.isOpen()) {
726 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
727 "Successfully", "RequestDB", "updateResOperStatus", null);