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.sql.Timestamp;
25 import java.text.SimpleDateFormat;
26 import java.util.ArrayList;
27 import java.util.Date;
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 CONFIGURATION_INSTANCE_ID = "configurationId";
64 protected static final String CONFIGURATION_INSTANCE_NAME= "configurationName";
65 protected static final String OPERATIONAL_ENV_ID = "operationalEnvId";
66 protected static final String OPERATIONAL_ENV_NAME = "operationalEnvName";
67 protected static final String NETWORK_INSTANCE_ID = "networkId";
68 protected static final String GLOBAL_SUBSCRIBER_ID = "globalSubscriberId";
69 protected static final String SERVICE_NAME_VERSION_ID = "serviceNameVersionId";
70 protected static final String SERVICE_ID = "serviceId";
71 protected static final String SERVICE_VERSION = "serviceVersion";
72 protected static final String REQUEST_ID = "requestId";
73 protected static final String REQUESTOR_ID = "requestorId";
75 protected static MockRequestsDatabase mockDB = null;
77 public static RequestsDatabase getInstance() {
78 return new RequestsDatabase(new RequestsDbSessionFactoryManager ());
81 protected RequestsDatabase (AbstractSessionFactoryManager sessionFactoryRequest) {
82 sessionFactoryRequestDB = sessionFactoryRequest;
85 public boolean healthCheck () {
86 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
88 Query query = session.createSQLQuery (" show tables ");
90 List<?> list = query.list();
93 if (session != null && session.isOpen ()) {
101 public int updateInfraStatus (String requestId, String requestStatus, String lastModifiedBy) {
102 long startTime = System.currentTimeMillis ();
103 msoLogger.debug ("Update infra request record " + requestId + " with status " + requestStatus);
104 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
108 session.beginTransaction ();
109 Query query = session.createQuery ("update InfraActiveRequests set requestStatus = :requestStatus, modifyTime = :modifyTime, lastModifiedBy = :lastModifiedBy where requestId = :requestId ");
110 query.setParameter ("requestStatus", requestStatus);
111 query.setParameter (REQUEST_ID, requestId);
112 query.setParameter ("lastModifiedBy", lastModifiedBy);
113 Timestamp modifyTimeStamp = new Timestamp (System.currentTimeMillis());
114 query.setParameter ("modifyTime", modifyTimeStamp);
115 result = query.executeUpdate ();
116 session.getTransaction ().commit ();
118 if (session != null && session.isOpen ()) {
121 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "updateInfraStatus", null);
126 public int updateInfraStatus (String requestId, String requestStatus, long progress, String lastModifiedBy) {
127 long startTime = System.currentTimeMillis ();
128 msoLogger.debug ("Update infra request record " + requestId + " with status " + requestStatus);
129 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
133 session.beginTransaction ();
134 Query query = session.createQuery ("update InfraActiveRequests set requestStatus = :requestStatus, modifyTime = :modifyTime, progress = :progress, lastModifiedBy = :lastModifiedBy where requestId = :requestId ");
135 query.setParameter ("requestStatus", requestStatus);
136 query.setParameter (REQUEST_ID, requestId);
137 query.setParameter ("progress", progress);
138 query.setParameter ("lastModifiedBy", lastModifiedBy);
139 Timestamp modifyTimeStamp = new Timestamp (System.currentTimeMillis());
140 query.setParameter ("modifyTime", modifyTimeStamp);
141 result = query.executeUpdate ();
142 session.getTransaction ().commit ();
144 if (session != null && session.isOpen ()) {
147 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "updateInfraStatus", null);
152 public int updateInfraFinalStatus (String requestId, String requestStatus, String statusMessage, long progress, String responseBody, String lastModifiedBy) {
153 long startTime = System.currentTimeMillis ();
154 msoLogger.debug ("Update infra request record " + requestId + " with status " + requestStatus);
155 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
159 session.beginTransaction ();
160 Query query = session.createQuery ("update InfraActiveRequests set requestStatus = :requestStatus, statusMessage = :statusMessage, progress = :progress, endTime = :endTime, responseBody = :responseBody, lastModifiedBy = :lastModifiedBy where id.requestId = :requestId ");
161 query.setParameter ("requestStatus", requestStatus);
162 query.setParameter ("requestId", requestId);
163 Timestamp endTimeStamp = new Timestamp (System.currentTimeMillis());
164 query.setParameter ("endTime", endTimeStamp);
165 query.setParameter ("statusMessage", statusMessage);
166 query.setParameter ("progress", progress);
167 query.setParameter ("responseBody", responseBody);
168 query.setParameter ("lastModifiedBy", lastModifiedBy);
169 result = query.executeUpdate ();
170 session.getTransaction ().commit ();
172 if (session != null && session.isOpen ()) {
175 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "updateInfraFinalStatus", null);
181 private List<InfraActiveRequests> executeInfraQuery (List <Criterion> criteria, Order order) {
183 long startTime = System.currentTimeMillis ();
184 msoLogger.debug ("Execute query on infra active request table");
186 List <InfraActiveRequests> results = new ArrayList<>();
188 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
190 session.beginTransaction ();
191 Criteria crit = session.createCriteria (InfraActiveRequests.class);
192 for (Criterion criterion : criteria) {
193 crit.add (criterion);
195 crit.addOrder (order);
197 // @SuppressWarnings("unchecked")
198 results = crit.list ();
201 if (session != null && session.isOpen ()) {
204 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "getInfraActiveRequest", null);
209 public InfraActiveRequests getRequestFromInfraActive (String requestId) {
210 long startTime = System.currentTimeMillis ();
211 msoLogger.debug ("Get request " + requestId + " from InfraActiveRequests DB");
213 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
214 InfraActiveRequests ar = null;
216 session.beginTransaction ();
217 Query query = session.createQuery ("from InfraActiveRequests where requestId = :requestId OR clientRequestId = :requestId");
218 query.setParameter (REQUEST_ID, requestId);
219 ar = (InfraActiveRequests) query.uniqueResult ();
221 if (session != null && session.isOpen ()) {
224 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "InfraRequestDB", "getRequestFromInfraActive", null);
229 public InfraActiveRequests checkInstanceNameDuplicate (HashMap<String,String> instanceIdMap, String instanceName, String requestScope) {
231 List <Criterion> criteria = new LinkedList <> ();
233 if(instanceName != null && !instanceName.equals("")) {
235 if("service".equals(requestScope)){
236 criteria.add (Restrictions.eq (SERVICE_INSTANCE_NAME, instanceName));
237 } else if("vnf".equals(requestScope)){
238 criteria.add (Restrictions.eq (VNF_INSTANCE_NAME, instanceName));
239 } else if("volumeGroup".equals(requestScope)){
240 criteria.add (Restrictions.eq (VOLUME_GROUP_INSTANCE_NAME, instanceName));
241 } else if("vfModule".equals(requestScope)){
242 criteria.add (Restrictions.eq (VFMODULE_INSTANCE_NAME, instanceName));
243 } else if("network".equals(requestScope)){
244 criteria.add (Restrictions.eq (NETWORK_INSTANCE_NAME, instanceName));
245 } else if(requestScope.equals("configuration")) {
246 criteria.add (Restrictions.eq (CONFIGURATION_INSTANCE_NAME, instanceName));
247 } else if(requestScope.equals("operationalEnvironment")) {
248 criteria.add (Restrictions.eq (OPERATIONAL_ENV_NAME, instanceName));
252 if(instanceIdMap != null){
253 if("service".equals(requestScope) && instanceIdMap.get("serviceInstanceId") != null){
254 criteria.add (Restrictions.eq (SERVICE_INSTANCE_ID, instanceIdMap.get("serviceInstanceId")));
257 if("vnf".equals(requestScope) && instanceIdMap.get("vnfInstanceId") != null){
258 criteria.add (Restrictions.eq (VNF_INSTANCE_ID, instanceIdMap.get("vnfInstanceId")));
261 if("vfModule".equals(requestScope) && instanceIdMap.get("vfModuleInstanceId") != null){
262 criteria.add (Restrictions.eq (VFMODULE_INSTANCE_ID, instanceIdMap.get("vfModuleInstanceId")));
265 if("volumeGroup".equals(requestScope) && instanceIdMap.get("volumeGroupInstanceId") != null){
266 criteria.add (Restrictions.eq (VOLUME_GROUP_INSTANCE_ID, instanceIdMap.get("volumeGroupInstanceId")));
269 if("network".equals(requestScope) && instanceIdMap.get("networkInstanceId") != null){
270 criteria.add (Restrictions.eq (NETWORK_INSTANCE_ID, instanceIdMap.get("networkInstanceId")));
273 if(requestScope.equals("configuration") && instanceIdMap.get("configurationInstanceId") != null){
274 criteria.add (Restrictions.eq (CONFIGURATION_INSTANCE_ID, instanceIdMap.get("configurationInstanceId")));
277 if(requestScope.equals("operationalEnvironment") && instanceIdMap.get("operationalEnvironmentId") != null) {
278 criteria.add (Restrictions.eq (OPERATIONAL_ENV_ID, instanceIdMap.get("operationalEnvironmentId")));
283 criteria.add (Restrictions.in ("requestStatus", new String[] { "PENDING", "IN_PROGRESS", "TIMEOUT", "PENDING_MANUAL_TASK" }));
285 Order order = Order.desc (START_TIME);
287 List<InfraActiveRequests> dupList = executeInfraQuery(criteria, order);
289 InfraActiveRequests infraActiveRequests = null;
291 if(dupList != null && !dupList.isEmpty()){
292 infraActiveRequests = dupList.get(0);
295 return infraActiveRequests;
298 public List<InfraActiveRequests> getOrchestrationFiltersFromInfraActive (Map<String, List<String>> orchestrationMap) {
301 List <Criterion> criteria = new LinkedList <> ();
302 for (Map.Entry<String, List<String>> entry : orchestrationMap.entrySet())
304 String mapKey = entry.getKey();
305 if("serviceInstanceId".equalsIgnoreCase(mapKey)) {
306 mapKey = "serviceInstanceId";
307 } else if("serviceInstanceName".equalsIgnoreCase(mapKey)) {
308 mapKey = "serviceInstanceName";
309 } else if("vnfInstanceId".equalsIgnoreCase(mapKey)){
311 } else if("vnfInstanceName".equalsIgnoreCase(mapKey)) {
313 } else if("vfModuleInstanceId".equalsIgnoreCase(mapKey)) {
314 mapKey = "vfModuleId";
315 } else if("vfModuleInstanceName".equalsIgnoreCase(mapKey)) {
316 mapKey = "vfModuleName";
317 } else if("volumeGroupInstanceId".equalsIgnoreCase(mapKey)) {
318 mapKey = "volumeGroupId";
319 } else if("volumeGroupInstanceName".equalsIgnoreCase(mapKey)) {
320 mapKey = "volumeGroupName";
321 } else if("networkInstanceId".equalsIgnoreCase(mapKey)) {
322 mapKey = "networkId";
323 } else if("networkInstanceName".equalsIgnoreCase(mapKey)) {
324 mapKey = "networkName";
325 } else if(mapKey.equalsIgnoreCase("configurationInstanceId")) {
326 mapKey = "configurationId";
327 } else if(mapKey.equalsIgnoreCase("configurationInstanceName")) {
328 mapKey = "configurationName";
329 } else if("lcpCloudRegionId".equalsIgnoreCase(mapKey)) {
330 mapKey = "aicCloudRegion";
331 } else if("tenantId".equalsIgnoreCase(mapKey)) {
333 } else if("modelType".equalsIgnoreCase(mapKey)) {
334 mapKey = "requestScope";
335 } else if("requestorId".equalsIgnoreCase(mapKey)) {
336 mapKey = "requestorId";
337 } else if("requestExecutionDate".equalsIgnoreCase(mapKey)) {
338 mapKey = "startTime";
341 String propertyValue = entry.getValue().get(1);
342 if ("startTime".equals(mapKey)) {
343 SimpleDateFormat format = new SimpleDateFormat("MM-dd-yyyy");
345 Date thisDate = format.parse(propertyValue);
346 Timestamp minTime = new Timestamp(thisDate.getTime());
347 Timestamp maxTime = new Timestamp(thisDate.getTime() + TimeUnit.DAYS.toMillis(1));
349 if("DOES_NOT_EQUAL".equalsIgnoreCase(entry.getValue().get(0))) {
350 criteria.add(Restrictions.or(Restrictions.lt(mapKey, minTime),
351 Restrictions.ge(mapKey, maxTime)));
353 criteria.add(Restrictions.between(mapKey, minTime, maxTime));
357 msoLogger.debug("Exception in getOrchestrationFiltersFromInfraActive(): + " + e.getMessage(), e);
361 else if("DOES_NOT_EQUAL".equalsIgnoreCase(entry.getValue().get(0))) {
362 criteria.add(Restrictions.ne(mapKey, propertyValue));
364 criteria.add(Restrictions.eq(mapKey, propertyValue));
369 Order order = Order.asc (START_TIME);
371 return executeInfraQuery (criteria, order);
374 // Added this method for Tenant Isolation project ( 1802-295491a) to query the mso_requests DB
375 // (infra_active_requests table) for operationalEnvId and OperationalEnvName
376 public List<InfraActiveRequests> getCloudOrchestrationFiltersFromInfraActive (Map<String, String> orchestrationMap) {
377 List <Criterion> criteria = new LinkedList <> ();
379 // Add criteria on OperationalEnvironment RequestScope when requestorId is only specified in the filter
380 // as the same requestorId can also match on different API methods
381 String resourceType = orchestrationMap.get("resourceType");
382 if(resourceType == null) {
383 criteria.add(Restrictions.eq("requestScope", "operationalEnvironment"));
386 for (Map.Entry<String, String> entry : orchestrationMap.entrySet()) {
387 String mapKey = entry.getKey();
388 if(mapKey.equalsIgnoreCase("requestorId")) {
389 mapKey = "requestorId";
390 } else if(mapKey.equalsIgnoreCase("requestExecutionDate")) {
391 mapKey = "startTime";
392 } else if(mapKey.equalsIgnoreCase("operationalEnvironmentId")) {
393 mapKey = "operationalEnvId";
394 } else if(mapKey.equalsIgnoreCase("operationalEnvironmentName")) {
395 mapKey = "operationalEnvName";
396 } else if(mapKey.equalsIgnoreCase("resourceType")) {
397 mapKey = "requestScope";
400 String propertyValue = entry.getValue();
401 if (mapKey.equals("startTime")) {
402 SimpleDateFormat format = new SimpleDateFormat("MM-dd-yyyy");
404 Date thisDate = format.parse(propertyValue);
405 Timestamp minTime = new Timestamp(thisDate.getTime());
406 Timestamp maxTime = new Timestamp(thisDate.getTime() + TimeUnit.DAYS.toMillis(1));
408 criteria.add(Restrictions.between(mapKey, minTime, maxTime));
411 msoLogger.debug("Exception in getCloudOrchestrationFiltersFromInfraActive(): + " + e.getMessage());
415 criteria.add(Restrictions.eq(mapKey, propertyValue));
419 Order order = Order.asc (START_TIME);
420 return executeInfraQuery (criteria, order);
423 public List <InfraActiveRequests> getRequestListFromInfraActive (String queryAttributeName,
425 String requestType) {
426 msoLogger.debug ("Get list of infra requests from DB with " + queryAttributeName + " = " + queryValue);
428 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
430 session.beginTransaction ();
431 Criteria crit = session.createCriteria (InfraActiveRequests.class)
432 .add (Restrictions.eq (queryAttributeName, queryValue));
433 crit.add (Restrictions.eqOrIsNull (REQUEST_TYPE, requestType));
434 crit.addOrder (Order.desc (START_TIME));
435 crit.addOrder (Order.asc (SOURCE));
437 @SuppressWarnings("unchecked")
438 List <InfraActiveRequests> arList = crit.list ();
439 if (arList != null && !arList.isEmpty ()) {
443 if (session != null && session.isOpen ()) {
446 // msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "getRequestListFromInfraActive", null);
452 public InfraActiveRequests getRequestFromInfraActive (String requestId, String requestType) {
453 long startTime = System.currentTimeMillis ();
454 msoLogger.debug ("Get infra request from DB with id " + requestId);
456 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
457 InfraActiveRequests ar = null;
459 session.beginTransaction ();
460 Query query = session.createQuery ("from InfraActiveRequests where (requestId = :requestId OR clientRequestId = :requestId) and requestType = :requestType");
461 query.setParameter (REQUEST_ID, requestId);
462 query.setParameter (REQUEST_TYPE, requestType);
463 ar = (InfraActiveRequests) query.uniqueResult ();
465 if (session != null && session.isOpen ()) {
468 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "getRequestFromInfraActive", null);
474 public InfraActiveRequests checkDuplicateByVnfName (String vnfName, String action, String requestType) {
476 long startTime = System.currentTimeMillis ();
477 msoLogger.debug ("Get infra request from DB for VNF " + vnfName + " and action " + action + " and requestType " + requestType);
479 InfraActiveRequests ar = null;
480 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
483 session.beginTransaction ();
484 Query query = session.createQuery ("from InfraActiveRequests where vnfName = :vnfName and action = :action and (requestStatus = 'PENDING' or requestStatus = 'IN_PROGRESS' or requestStatus = 'TIMEOUT' or requestStatus = 'PENDING_MANUAL_TASK') and requestType = :requestType ORDER BY startTime DESC");
485 query.setParameter ("vnfName", vnfName);
486 query.setParameter ("action", action);
487 query.setParameter (REQUEST_TYPE, requestType);
488 @SuppressWarnings("unchecked")
489 List <InfraActiveRequests> results = query.list ();
490 if (!results.isEmpty ()) {
491 ar = results.get (0);
494 if (session != null && session.isOpen ()) {
497 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "checkDuplicateByVnfName", null);
503 public InfraActiveRequests checkDuplicateByVnfId (String vnfId, String action, String requestType) {
505 long startTime = System.currentTimeMillis ();
506 msoLogger.debug ("Get list of infra requests from DB for VNF " + vnfId + " and action " + action);
508 InfraActiveRequests ar = null;
509 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
512 session.beginTransaction ();
513 Query query = session.createQuery ("from InfraActiveRequests where vnfId = :vnfId and action = :action and (requestStatus = 'PENDING' or requestStatus = 'IN_PROGRESS' or requestStatus = 'TIMEOUT' or requestStatus = 'PENDING_MANUAL_TASK') and requestType = :requestType ORDER BY startTime DESC");
514 query.setParameter ("vnfId", vnfId);
515 query.setParameter ("action", action);
516 query.setParameter (REQUEST_TYPE, requestType);
517 @SuppressWarnings("unchecked")
518 List <InfraActiveRequests> results = query.list ();
519 if (!results.isEmpty ()) {
520 ar = results.get (0);
523 if (session != null && session.isOpen ()) {
526 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "checkDuplicateByVnfId", null);
532 public void setMockDB(MockRequestsDatabase mockDB) {
533 RequestsDatabase.mockDB = mockDB;
537 * Fetch a specific SiteStatus by SiteName.
539 * @param siteName The unique name of the site
540 * @return SiteStatus object or null if none found
542 public SiteStatus getSiteStatus (String siteName) {
543 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
545 SiteStatus siteStatus = null;
546 msoLogger.debug ("Request database - get Site Status with Site name:" + siteName);
548 String hql = "FROM SiteStatus WHERE siteName = :site_name";
549 Query query = session.createQuery (hql);
550 query.setParameter ("site_name", siteName);
552 siteStatus = (SiteStatus) query.uniqueResult ();
554 if (session != null && session.isOpen ()) {
557 msoLogger.debug ("getSiteStatus - Successfully: " + siteStatus);
563 * Fetch a specific SiteStatus by SiteName.
565 * @param siteName The unique name of the site
566 * @param status The updated status of the Site
568 public void updateSiteStatus (String siteName, boolean status) {
569 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
570 session.beginTransaction ();
572 long startTime = System.currentTimeMillis ();
573 msoLogger.debug ("Request database - save Site Status with Site name:" + siteName);
575 String hql = "FROM SiteStatus WHERE siteName = :site_name";
576 Query query = session.createQuery (hql);
577 query.setParameter ("site_name", siteName);
579 SiteStatus siteStatus = (SiteStatus) query.uniqueResult ();
580 if (siteStatus == null) {
581 siteStatus = new SiteStatus ();
582 siteStatus.setSiteName (siteName);
583 siteStatus.setStatus (status);
584 //siteStatus.setCreated(new Timestamp(new Date().getTime()));
585 session.save (siteStatus);
587 siteStatus.setStatus(status);
588 //siteStatus.setCreated(new Timestamp(new Date().getTime()));
589 session.merge (siteStatus);
591 session.getTransaction ().commit ();
594 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "updateSiteStatus", null);
599 * get the operation progress
602 * @param serviceId the serviceId
603 * @param operationId the operation id
604 * @return current progress of the operation
605 * @since ONAP Amsterdam Release
607 public OperationStatus getOperationStatus(String serviceId, String operationId) {
609 long startTime = System.currentTimeMillis();
610 msoLogger.debug("Execute query on infra active request table");
612 OperationStatus operStatus = null;
613 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
615 session.beginTransaction();
616 String hql = "FROM OperationStatus WHERE SERVICE_ID = :service_id and OPERATION_ID = :operation_id";
617 Query query = session.createQuery(hql);
618 query.setParameter("service_id", serviceId);
619 query.setParameter("operation_id", operationId);
620 operStatus = (OperationStatus)query.uniqueResult();
623 if(session != null && session.isOpen()) {
626 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
627 "Successfully", "RequestDB", "getOperationStatus", null);
633 * get the operation progress
636 * @param serviceId the serviceId
637 * @return current progress of the operation
638 * @since ONAP Amsterdam Release
640 public OperationStatus getOperationStatusByServiceId(String serviceId) {
642 long startTime = System.currentTimeMillis();
643 msoLogger.debug("Execute query on infra active request table");
645 OperationStatus operStatus = null;
646 List<Object> list = null;
647 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
649 session.beginTransaction();
650 String hql = "FROM OperationStatus WHERE SERVICE_ID = :service_id order by OPERATE_AT desc";
651 Query query = session.createQuery(hql);
652 query.setParameter("service_id", serviceId);
654 if(list != null && list.size() >= 1) {
655 operStatus = (OperationStatus) list.get(0);
659 if(session != null && session.isOpen()) {
662 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
663 "Successfully", "RequestDB", "getOperationStatus", null);
669 * get the operation progress
672 * @param serviceName the serviceName
673 * @return current progress of the operation
674 * @since ONAP Amsterdam Release
676 public OperationStatus getOperationStatusByServiceName(String serviceName) {
678 long startTime = System.currentTimeMillis();
679 msoLogger.debug("Execute query on infra active request table");
681 OperationStatus operStatus = null;
682 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
684 session.beginTransaction();
685 String hql = "FROM OperationStatus WHERE SERVICE_NAME = :service_name";
686 Query query = session.createQuery(hql);
687 query.setParameter("service_name", serviceName);
688 operStatus = (OperationStatus)query.uniqueResult();
691 if(session != null && session.isOpen()) {
694 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
695 "Successfully", "RequestDB", "getOperationStatus", null);
701 * update the operation status
704 * @param operstatus the operation object
705 * @since ONAP Amsterdam Release
707 public void updateOperationStatus(OperationStatus operstatus) {
708 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
709 session.beginTransaction();
711 long startTime = System.currentTimeMillis();
712 msoLogger.debug("Request database - save Operation Status with service Id:" + operstatus.getServiceId()
713 + ", operationId:" + operstatus.getOperationId());
716 "FROM OperationStatus WHERE SERVICE_ID = :service_id and OPERATION_ID = :operation_id";
717 Query query = session.createQuery(hql);
718 query.setParameter("service_id", operstatus.getServiceId());
719 query.setParameter("operation_id", operstatus.getOperationId());
720 OperationStatus exsitingStatus = (OperationStatus)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", "updateOperationStatus", null);
735 * get a operation status of a resource
738 * @param serviceId the service Id
739 * @param operationId the operation id
740 * @param resourceTemplateUUID the resource template uuid
741 * @return the progress status of a resource
742 * @since ONAP Amsterdam Release
744 public ResourceOperationStatus getResourceOperationStatus(String serviceId, String operationId,
745 String resourceTemplateUUID) {
746 long startTime = System.currentTimeMillis();
747 msoLogger.debug("Execute query on infra active request table");
749 ResourceOperationStatus operStatus = null;
750 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
752 session.beginTransaction();
754 "FROM ResourceOperationStatus WHERE serviceId = :service_id and operationId = :operation_id and resourceTemplateUUID= :uuid";
755 Query query = session.createQuery(hql);
756 query.setParameter("service_id", serviceId);
757 query.setParameter("operation_id", operationId);
758 query.setParameter("uuid", resourceTemplateUUID);
759 operStatus = (ResourceOperationStatus)query.uniqueResult();
762 if (session != null && session.isOpen ()) {
765 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
766 "Successfully", "RequestDB", "getOperationStatus", null);
772 * update the resource operation
775 * @param operStatus the resource operation object
776 * @since ONAP Amsterdam Release
778 public void updateResOperStatus(ResourceOperationStatus operStatus) {
779 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
780 session.beginTransaction();
782 long startTime = System.currentTimeMillis();
783 msoLogger.debug("Request database - save Resource Operation Status with service Id:" + operStatus.getServiceId()
784 + ", operationId:" + operStatus.getOperationId() + ", resourceUUId:"
785 + operStatus.getResourceTemplateUUID());
788 "FROM ResourceOperationStatus WHERE SERVICE_ID = :service_id and OPERATION_ID = :operation_id and RESOURCE_TEMPLATE_UUID = :res_uuid";
789 Query query = session.createQuery(hql);
790 query.setParameter("service_id", operStatus.getServiceId());
791 query.setParameter("operation_id", operStatus.getOperationId());
792 query.setParameter("res_uuid", operStatus.getResourceTemplateUUID());
793 ResourceOperationStatus exsitingStatus = (ResourceOperationStatus)query.uniqueResult();
794 if(exsitingStatus == null) {
795 session.save(operStatus);
797 session.merge(operStatus);
799 session.getTransaction().commit();
802 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
803 "Successfully", "RequestDB", "updateResOperStatus", null);
805 updateOperationStatusBasedOnResourceStatus(operStatus);
809 * update service operation status when a operation resource status updated
812 * @param operStatus the resource operation status
813 * @since ONAP Amsterdam Release
815 private void updateOperationStatusBasedOnResourceStatus(ResourceOperationStatus operStatus) {
816 Session session = sessionFactoryRequestDB.getSessionFactory().openSession();
817 session.beginTransaction();
819 long startTime = System.currentTimeMillis();
820 msoLogger.debug("Request database - query Resource Operation Status with service Id:"
821 + operStatus.getServiceId() + ", operationId:" + operStatus.getOperationId());
823 // query all resources of the service
824 String hql = "FROM ResourceOperationStatus WHERE SERVICE_ID = :service_id and OPERATION_ID = :operation_id";
825 Query query = session.createQuery(hql);
826 query.setParameter("service_id", operStatus.getServiceId());
827 query.setParameter("operation_id", operStatus.getOperationId());
828 @SuppressWarnings("unchecked")
829 List<ResourceOperationStatus> lstResourceStatus = (List<ResourceOperationStatus>)query.list();
830 // count the total progress
831 int resourceCount = lstResourceStatus.size();
833 boolean isFinished = true;
834 for (ResourceOperationStatus lstResourceStatu : lstResourceStatus) {
835 progress = progress + Integer.valueOf(lstResourceStatu.getProgress()) / resourceCount;
836 if (Status.PROCESSING.equals(lstResourceStatu.getStatus())) {
840 OperationStatus serviceOperStatus =
841 getOperationStatus(operStatus.getServiceId(), operStatus.getOperationId());
842 progress = progress > 100 ? 100 : progress;
843 serviceOperStatus.setProgress(String.valueOf(progress));
844 serviceOperStatus.setOperationContent(operStatus.getStatusDescription());
845 // if current resource failed. service failed.
846 if(RequestsDbConstant.Status.ERROR.equals(operStatus.getStatus())) {
847 serviceOperStatus.setResult(RequestsDbConstant.Status.ERROR);
848 serviceOperStatus.setReason(operStatus.getStatusDescription());
849 } else if(isFinished) {
851 serviceOperStatus.setResult(RequestsDbConstant.Status.FINISHED);
852 serviceOperStatus.setProgress(RequestsDbConstant.Progress.ONE_HUNDRED);
854 updateOperationStatus(serviceOperStatus);
857 msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
858 "Successfully", "RequestDB", "updateResOperStatus", null);
862 public InfraActiveRequests checkVnfIdStatus(String operationalEnvironmentId) {
863 long startTime = System.currentTimeMillis ();
864 msoLogger.debug ("Get Infra request from DB for OperationalEnvironmentId " + operationalEnvironmentId);
866 InfraActiveRequests ar = null;
867 Session session = sessionFactoryRequestDB.getSessionFactory ().openSession ();
870 session.beginTransaction ();
871 Query query = session.createQuery ("FROM InfraActiveRequests WHERE operationalEnvId = :operationalEnvId AND requestStatus != 'COMPLETE' AND action = 'create' ORDER BY startTime DESC");
872 query.setParameter ("operationalEnvId", operationalEnvironmentId);
874 @SuppressWarnings("unchecked")
875 List <InfraActiveRequests> results = query.list ();
876 if (!results.isEmpty ()) {
877 ar = results.get (0);
880 if (session != null && session.isOpen ()) {
883 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "checkDuplicateByVnfName", null);