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.sql.Timestamp;
24 import java.util.ArrayList;
25 import java.util.Calendar;
26 import java.util.HashMap;
27 import java.util.LinkedList;
28 import java.util.List;
31 import org.apache.http.HttpStatus;
32 import org.hibernate.Criteria;
33 import org.hibernate.Query;
34 import org.hibernate.Session;
35 import org.hibernate.criterion.Criterion;
36 import org.hibernate.criterion.Order;
37 import org.hibernate.criterion.Restrictions;
38 import org.hibernate.persister.entity.AbstractEntityPersister;
40 import org.openecomp.mso.logger.MsoLogger;
42 public final class RequestsDatabase {
44 private static MsoLogger msoLogger = MsoLogger.getMsoLogger (MsoLogger.Catalog.GENERAL);
46 private static final String SOURCE = "source";
47 private static final String START_TIME = "startTime";
48 private static final String REQUEST_TYPE = "requestType";
49 private static final String SERVICE_INSTANCE_ID = "serviceInstanceId";
50 private static final String SERVICE_INSTANCE_NAME = "serviceInstanceName";
51 private static final String VNF_INSTANCE_NAME = "vnfName";
52 private static final String VNF_INSTANCE_ID = "vnfId";
53 private static final String VOLUME_GROUP_INSTANCE_NAME = "volumeGroupName";
54 private static final String VOLUME_GROUP_INSTANCE_ID = "volumeGroupId";
55 private static final String VFMODULE_INSTANCE_NAME = "vfModuleName";
56 private static final String VFMODULE_INSTANCE_ID = "vfModuleId";
57 private static final String NETWORK_INSTANCE_NAME = "networkName";
58 private static final String NETWORK_INSTANCE_ID = "networkId";
59 private static final String GLOBAL_SUBSCRIBER_ID = "globalSubscriberId";
60 private static final String SERVICE_NAME_VERSION_ID = "serviceNameVersionId";
61 private static final String SERVICE_ID = "serviceId";
62 private static final String SERVICE_VERSION = "serviceVersion";
63 private static final String SERVICE_TYPE = "serviceType";
64 private static final String REQUEST_ID = "requestId";
65 private static MockRequestsDatabase mockDB = null;
68 * Avoids creating an instance of this utility class.
70 private RequestsDatabase () {
73 public static boolean healthCheck () {
74 Session session = HibernateUtil.getSessionFactory ().openSession ();
76 Query query = session.createSQLQuery (" show tables ");
78 List<?> list = query.list();
81 if (session != null && session.isOpen ()) {
89 public static int updateInfraStatus (String requestId, String requestStatus, String lastModifiedBy) {
90 long startTime = System.currentTimeMillis ();
91 msoLogger.debug ("Update infra request record " + requestId + " with status " + requestStatus);
92 Session session = HibernateUtil.getSessionFactory ().openSession ();
96 session.beginTransaction ();
97 Query query = session.createQuery ("update InfraActiveRequests set requestStatus = :requestStatus, modifyTime = :modifyTime, lastModifiedBy = :lastModifiedBy where requestId = :requestId ");
98 query.setParameter ("requestStatus", requestStatus);
99 query.setParameter (REQUEST_ID, requestId);
100 query.setParameter ("lastModifiedBy", lastModifiedBy);
101 Calendar modifyTime = Calendar.getInstance ();
102 Timestamp modifyTimeStamp = new Timestamp (modifyTime.getTimeInMillis ());
103 query.setParameter ("modifyTime", modifyTimeStamp);
104 result = query.executeUpdate ();
105 session.getTransaction ().commit ();
107 if (session != null && session.isOpen ()) {
110 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "updateInfraStatus", null);
115 public static int updateInfraStatus (String requestId, String requestStatus, long progress, String lastModifiedBy) {
116 long startTime = System.currentTimeMillis ();
117 msoLogger.debug ("Update infra request record " + requestId + " with status " + requestStatus);
118 Session session = HibernateUtil.getSessionFactory ().openSession ();
122 session.beginTransaction ();
123 Query query = session.createQuery ("update InfraActiveRequests set requestStatus = :requestStatus, modifyTime = :modifyTime, progress = :progress, lastModifiedBy = :lastModifiedBy where requestId = :requestId ");
124 query.setParameter ("requestStatus", requestStatus);
125 query.setParameter (REQUEST_ID, requestId);
126 query.setParameter ("progress", progress);
127 query.setParameter ("lastModifiedBy", lastModifiedBy);
128 Calendar modifyTime = Calendar.getInstance ();
129 Timestamp modifyTimeStamp = new Timestamp (modifyTime.getTimeInMillis ());
130 query.setParameter ("modifyTime", modifyTimeStamp);
131 result = query.executeUpdate ();
132 session.getTransaction ().commit ();
134 if (session != null && session.isOpen ()) {
137 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "updateInfraStatus", null);
142 public static int updateInfraFinalStatus (String requestId, String requestStatus, String statusMessage, long progress, String responseBody, String lastModifiedBy) {
143 long startTime = System.currentTimeMillis ();
144 msoLogger.debug ("Update infra request record " + requestId + " with status " + requestStatus);
145 Session session = HibernateUtil.getSessionFactory ().openSession ();
149 session.beginTransaction ();
150 Query query = session.createQuery ("update InfraActiveRequests set requestStatus = :requestStatus, statusMessage = :statusMessage, progress = :progress, endTime = :endTime, responseBody = :responseBody, lastModifiedBy = :lastModifiedBy where id.requestId = :requestId ");
151 query.setParameter ("requestStatus", requestStatus);
152 query.setParameter ("requestId", requestId);
153 Calendar endTime = Calendar.getInstance ();
154 Timestamp endTimeStamp = new Timestamp (endTime.getTimeInMillis ());
155 query.setParameter ("endTime", endTimeStamp);
156 query.setParameter ("statusMessage", statusMessage);
157 query.setParameter ("progress", progress);
158 query.setParameter ("responseBody", responseBody);
159 query.setParameter ("lastModifiedBy", lastModifiedBy);
160 result = query.executeUpdate ();
161 session.getTransaction ().commit ();
163 if (session != null && session.isOpen ()) {
166 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "updateInfraFinalStatus", null);
172 private static List<InfraActiveRequests> executeInfraQuery (List <Criterion> criteria, Order order) {
174 long startTime = System.currentTimeMillis ();
175 msoLogger.debug ("Execute query on infra active request table");
177 List <InfraActiveRequests> results = new ArrayList<InfraActiveRequests>();
179 Session session = HibernateUtil.getSessionFactory ().openSession ();
181 session.beginTransaction ();
182 Criteria crit = session.createCriteria (InfraActiveRequests.class);
183 for (Criterion criterion : criteria) {
184 crit.add (criterion);
186 crit.addOrder (order);
188 // @SuppressWarnings("unchecked")
189 results = crit.list ();
192 if (session != null && session.isOpen ()) {
195 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "getInfraActiveRequest", null);
200 public static InfraActiveRequests getRequestFromInfraActive (String requestId) {
201 long startTime = System.currentTimeMillis ();
202 msoLogger.debug ("Get request " + requestId + " from InfraActiveRequests DB");
204 Session session = HibernateUtil.getSessionFactory ().openSession ();
205 InfraActiveRequests ar = null;
207 session.beginTransaction ();
208 Query query = session.createQuery ("from InfraActiveRequests where requestId = :requestId OR clientRequestId = :requestId");
209 query.setParameter (REQUEST_ID, requestId);
210 ar = (InfraActiveRequests) query.uniqueResult ();
212 if (session != null && session.isOpen ()) {
215 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "InfraRequestDB", "getRequestFromInfraActive", null);
220 public static InfraActiveRequests checkInstanceNameDuplicate (HashMap<String,String> instanceIdMap, String instanceName, String requestScope) {
222 List <Criterion> criteria = new LinkedList <> ();
224 if(instanceName != null && !instanceName.equals("")) {
226 if(requestScope.equals("service")){
227 criteria.add (Restrictions.eq (SERVICE_INSTANCE_NAME, instanceName));
228 } else if(requestScope.equals("vnf")){
229 criteria.add (Restrictions.eq (VNF_INSTANCE_NAME, instanceName));
230 } else if(requestScope.equals("volumeGroup")){
231 criteria.add (Restrictions.eq (VOLUME_GROUP_INSTANCE_NAME, instanceName));
232 } else if(requestScope.equals("vfModule")){
233 criteria.add (Restrictions.eq (VFMODULE_INSTANCE_NAME, instanceName));
234 } else if(requestScope.equals("network")){
235 criteria.add (Restrictions.eq (NETWORK_INSTANCE_NAME, instanceName));
239 if(instanceIdMap != null){
240 if(requestScope.equals("service") && instanceIdMap.get("serviceInstanceId") != null){
241 criteria.add (Restrictions.eq (SERVICE_INSTANCE_ID, instanceIdMap.get("serviceInstanceId")));
244 if(requestScope.equals("vnf") && instanceIdMap.get("vnfInstanceId") != null){
245 criteria.add (Restrictions.eq (VNF_INSTANCE_ID, instanceIdMap.get("vnfInstanceId")));
248 if(requestScope.equals("vfModule") && instanceIdMap.get("vfModuleInstanceId") != null){
249 criteria.add (Restrictions.eq (VFMODULE_INSTANCE_ID, instanceIdMap.get("vfModuleInstanceId")));
252 if(requestScope.equals("volumeGroup") && instanceIdMap.get("volumeGroupInstanceId") != null){
253 criteria.add (Restrictions.eq (VOLUME_GROUP_INSTANCE_ID, instanceIdMap.get("volumeGroupInstanceId")));
256 if(requestScope.equals("network") && instanceIdMap.get("networkInstanceId") != null){
257 criteria.add (Restrictions.eq (NETWORK_INSTANCE_ID, instanceIdMap.get("networkInstanceId")));
262 criteria.add (Restrictions.in ("requestStatus", new String[] { "PENDING", "IN_PROGRESS", "TIMEOUT" }));
264 Order order = Order.desc (START_TIME);
266 List<InfraActiveRequests> dupList = executeInfraQuery(criteria, order);
268 InfraActiveRequests infraActiveRequests = null;
270 if(dupList != null && dupList.size() > 0){
271 infraActiveRequests = dupList.get(0);
274 return infraActiveRequests;
277 public static List<InfraActiveRequests> getOrchestrationFiltersFromInfraActive (Map<String, List<String>> orchestrationMap) {
280 List <Criterion> criteria = new LinkedList <> ();
281 for (Map.Entry<String, List<String>> entry : orchestrationMap.entrySet())
283 String mapKey = entry.getKey();
285 if(mapKey.equalsIgnoreCase("vnfInstanceId")){
287 } else if(mapKey.equalsIgnoreCase("vnfInstanceName")) {
289 } else if(mapKey.equalsIgnoreCase("vfModuleInstanceId")) {
290 mapKey = "vfModuleId";
291 } else if(mapKey.equalsIgnoreCase("vfModuleInstanceName")) {
292 mapKey = "vfModuleName";
293 } else if(mapKey.equalsIgnoreCase("volumeGroupInstanceId")) {
294 mapKey = "volumeGroupId";
295 } else if(mapKey.equalsIgnoreCase("volumeGroupInstanceName")) {
296 mapKey = "volumeGroupName";
297 } else if(mapKey.equalsIgnoreCase("networkInstanceId")) {
298 mapKey = "networkId";
299 } else if(mapKey.equalsIgnoreCase("networkInstanceName")) {
300 mapKey = "networkName";
301 } else if(mapKey.equalsIgnoreCase("lcpCloudRegionId")) {
302 mapKey = "aicCloudRegion";
305 criteria.add(Restrictions.eq(mapKey, entry.getValue().get(1)));
309 Order order = Order.asc (START_TIME);
311 return executeInfraQuery (criteria, order);
315 public static List <InfraActiveRequests> getRequestListFromInfraActive (String queryAttributeName,
317 String requestType) {
318 long startTime = System.currentTimeMillis ();
319 msoLogger.debug ("Get list of infra requests from DB with " + queryAttributeName + " = " + queryValue);
321 Session session = HibernateUtil.getSessionFactory ().openSession ();
323 session.beginTransaction ();
324 Criteria crit = session.createCriteria (InfraActiveRequests.class)
325 .add (Restrictions.eq (queryAttributeName, queryValue));
326 crit.add (Restrictions.eqOrIsNull (REQUEST_TYPE, requestType));
327 crit.addOrder (Order.desc (START_TIME));
328 crit.addOrder (Order.asc (SOURCE));
330 @SuppressWarnings("unchecked")
331 List <InfraActiveRequests> arList = crit.list ();
332 if (arList != null && !arList.isEmpty ()) {
336 if (session != null && session.isOpen ()) {
339 // msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "getRequestListFromInfraActive", null);
345 public static InfraActiveRequests getRequestFromInfraActive (String requestId, String requestType) {
346 long startTime = System.currentTimeMillis ();
347 msoLogger.debug ("Get infra request from DB with id " + requestId);
349 Session session = HibernateUtil.getSessionFactory ().openSession ();
350 InfraActiveRequests ar = null;
352 session.beginTransaction ();
353 Query query = session.createQuery ("from InfraActiveRequests where (requestId = :requestId OR clientRequestId = :requestId) and requestType = :requestType");
354 query.setParameter (REQUEST_ID, requestId);
355 query.setParameter (REQUEST_TYPE, requestType);
356 ar = (InfraActiveRequests) query.uniqueResult ();
358 if (session != null && session.isOpen ()) {
361 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "getRequestFromInfraActive", null);
367 public static InfraActiveRequests checkDuplicateByVnfName (String vnfName, String action, String requestType) {
369 long startTime = System.currentTimeMillis ();
370 msoLogger.debug ("Get infra request from DB for VNF " + vnfName + " and action " + action + " and requestType " + requestType);
372 InfraActiveRequests ar = null;
373 Session session = HibernateUtil.getSessionFactory ().openSession ();
376 session.beginTransaction ();
377 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");
378 query.setParameter ("vnfName", vnfName);
379 query.setParameter ("action", action);
380 query.setParameter (REQUEST_TYPE, requestType);
381 @SuppressWarnings("unchecked")
382 List <InfraActiveRequests> results = query.list ();
383 if (!results.isEmpty ()) {
384 ar = results.get (0);
387 if (session != null && session.isOpen ()) {
390 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "checkDuplicateByVnfName", null);
396 public static InfraActiveRequests checkDuplicateByVnfId (String vnfId, String action, String requestType) {
398 long startTime = System.currentTimeMillis ();
399 msoLogger.debug ("Get list of infra requests from DB for VNF " + vnfId + " and action " + action);
401 InfraActiveRequests ar = null;
402 Session session = HibernateUtil.getSessionFactory ().openSession ();
405 session.beginTransaction ();
406 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");
407 query.setParameter ("vnfId", vnfId);
408 query.setParameter ("action", action);
409 query.setParameter (REQUEST_TYPE, requestType);
410 @SuppressWarnings("unchecked")
411 List <InfraActiveRequests> results = query.list ();
412 if (!results.isEmpty ()) {
413 ar = results.get (0);
416 if (session != null && session.isOpen ()) {
419 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "checkDuplicateByVnfId", null);
425 public static void setMockDB(MockRequestsDatabase mockDB) {
426 RequestsDatabase.mockDB = mockDB;
430 * Fetch a specific SiteStatus by SiteName.
432 * @param siteName The unique name of the site
433 * @return SiteStatus object or null if none found
435 public static SiteStatus getSiteStatus (String siteName) {
436 Session session = HibernateUtil.getSessionFactory ().openSession ();
438 long startTime = System.currentTimeMillis ();
439 SiteStatus siteStatus = null;
440 msoLogger.debug ("Request database - get Site Status with Site name:" + siteName);
442 String hql = "FROM SiteStatus WHERE siteName = :site_name";
443 Query query = session.createQuery (hql);
444 query.setParameter ("site_name", siteName);
446 siteStatus = (SiteStatus) query.uniqueResult ();
448 if (session != null && session.isOpen ()) {
451 msoLogger.debug ("getSiteStatus - Successfully: " + siteStatus);
457 * Fetch a specific SiteStatus by SiteName.
459 * @param siteName The unique name of the site
460 * @param status The updated status of the Site
462 public static void updateSiteStatus (String siteName, boolean status) {
463 Session session = HibernateUtil.getSessionFactory ().openSession ();
464 session.beginTransaction ();
466 long startTime = System.currentTimeMillis ();
467 msoLogger.debug ("Request database - save Site Status with Site name:" + siteName);
469 String hql = "FROM SiteStatus WHERE siteName = :site_name";
470 Query query = session.createQuery (hql);
471 query.setParameter ("site_name", siteName);
473 SiteStatus siteStatus = (SiteStatus) query.uniqueResult ();
474 if (siteStatus == null) {
475 siteStatus = new SiteStatus ();
476 siteStatus.setSiteName (siteName);
477 siteStatus.setStatus (status);
478 //siteStatus.setCreated(new Timestamp(new Date().getTime()));
479 session.save (siteStatus);
481 siteStatus.setStatus(status);
482 //siteStatus.setCreated(new Timestamp(new Date().getTime()));
483 session.merge (siteStatus);
485 session.getTransaction ().commit ();
487 if (session != null && session.isOpen ()) {
490 msoLogger.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "RequestDB", "updateSiteStatus", null);