From c607da68bfb7f7440d5be7f0396609dc01eb0e90 Mon Sep 17 00:00:00 2001 From: sa282w Date: Tue, 1 May 2018 16:45:26 -0400 Subject: Changes for 2.4.0-SNAPSHOT Issue-ID: PORTAL-210 Included the pom changes for 2.4.0-SNAPSHOT, music and AAF changes. Change-Id: Ib1e1c2679271aa40eb3b50397724e8cdc5ffe01c Signed-off-by: sa282w --- .../onap/portalapp/music/service/MusicService.java | 109 +++++++++++++++++++++ 1 file changed, 109 insertions(+) (limited to 'ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/service/MusicService.java') diff --git a/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/service/MusicService.java b/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/service/MusicService.java index 4ceac22c..801e9c03 100644 --- a/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/service/MusicService.java +++ b/ecomp-sdk/epsdk-music/src/main/java/org/onap/portalapp/music/service/MusicService.java @@ -38,7 +38,12 @@ package org.onap.portalapp.music.service; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.onap.music.datastore.PreparedQueryObject; @@ -61,6 +66,7 @@ import org.springframework.session.Session; import org.springframework.web.client.RestTemplate; import com.datastax.driver.core.ResultSet; +import com.datastax.driver.core.Row; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -539,5 +545,108 @@ public class MusicService { path.append("/"); return path.toString(); } + + /** + * Get a list of sessions that need to be cleaned up + * + * @return List + */ + private static List getSessionToBeDeleted(){ + logger.debug(EELFLoggerDelegate.debugLogger, "initial getSessionToBeDeleted ..."); + + PreparedQueryObject queryObject = new PreparedQueryObject(); + ResultSet result = null; + List sessionIDList = new ArrayList<>(); + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + StringBuilder querySB = new StringBuilder(); + String cleanUpThreshold = MusicProperties.getProperty(MusicProperties.MUSIC_CLEAN_UP_THRESHOLD); //Clean up sessions that's cleanUpThreshold hours ago + Date dateForCleanup = new Date(System.currentTimeMillis() - 3600 * 1000 * Integer.valueOf(cleanUpThreshold)); // Get the threshold date that needs to be clean up + String dateForCleanupCondition = dateFormat.format(dateForCleanup); + querySB.append("SELECT ").append(MusicProperties.PRIMARY_ID).append(" FROM ").append(musicKeySpace) + .append(".").append(getTableName(true)).append(" WHERE ").append(MusicProperties.LAST_ACCESS_TIME) + .append("< ? ").append(" ALLOW FILTERING"); + queryObject.appendQueryString(querySB.toString()); + queryObject.addValue(dateForCleanupCondition); + + try{ + if (isAtomicGet) + result = MusicCore.atomicGet(musicKeySpace, musicMetaTable, null, queryObject); + else + result = MusicCore.get(queryObject); + Row row = result.one(); + while(row!=null){ + sessionIDList.add(row.get(MusicProperties.PRIMARY_ID, String.class)); + row = result.one(); + } + }catch(Exception e){ + logger.error(EELFLoggerDelegate.errorLogger, "Error while cleaning up music tables" , e); + } + return sessionIDList; + } + + /** + * Remove session data in music base on the defined frequency + * + * @return List + */ + public static void cleanUpMusic() { + boolean timeToCleanUp = MusicUtil.cleanUp(); // Decide whether to clean up or not + ReturnType result = null; + if(timeToCleanUp){ + /**Getting a list of sessions that need to be cleaned up*/ + List sessionIDList = getSessionToBeDeleted(); + if(sessionIDList!=null || sessionIDList.size()!=0){ + StringBuilder sessionIDListCondition = new StringBuilder(); + sessionIDListCondition.append("('"); + for(String s : sessionIDList){ + sessionIDListCondition.append(s); + sessionIDListCondition.append("','"); + } + sessionIDListCondition.deleteCharAt(sessionIDListCondition.length()-1); + sessionIDListCondition.deleteCharAt(sessionIDListCondition.length()-1); + sessionIDListCondition.append(")"); + StringBuilder querySB = new StringBuilder(); + PreparedQueryObject queryObject = new PreparedQueryObject(); + /**Deleting attributes table**/ + querySB = new StringBuilder(); + queryObject = new PreparedQueryObject(); + querySB.append("DELETE FROM ").append(musicKeySpace) + .append(".").append(getTableName(false)).append(" WHERE ").append(MusicProperties.PRIMARY_ID) + .append(" in ").append(sessionIDListCondition); + queryObject.appendQueryString(querySB.toString()); + try{ + if (isAtomicPut) + result = MusicCore.atomicPut(musicKeySpace, null, null, queryObject, null); + else + result = MusicCore.eventualPut(queryObject); + }catch(Exception e){ + logger.error(EELFLoggerDelegate.errorLogger, "Error while cleaning up music attributes tables" , e); + } + logger.debug(EELFLoggerDelegate.debugLogger, "Music sessions have been cleaned up !"); + + /**Deleting meta table**/ + logger.debug(EELFLoggerDelegate.debugLogger, "Cleaning up meta table ..."); + querySB = new StringBuilder(); + queryObject = new PreparedQueryObject(); + querySB.append("DELETE FROM ").append(musicKeySpace) + .append(".").append(getTableName(true)).append(" WHERE ").append(MusicProperties.PRIMARY_ID) + .append(" in ").append(sessionIDListCondition); + queryObject.appendQueryString(querySB.toString()); + try{ + if (isAtomicPut) + result = MusicCore.atomicPut(musicKeySpace, null, null, queryObject, null); + else + result = MusicCore.eventualPut(queryObject); + }catch(Exception e){ + logger.error(EELFLoggerDelegate.errorLogger, "Error while cleaning up music meta tables" , e); + } + + logger.debug(EELFLoggerDelegate.debugLogger, "Cleaned up attributes table ... "); + }else{ + logger.debug(EELFLoggerDelegate.debugLogger, "No Session needs to be cleaned up"); + } + + } + } } -- cgit 1.2.3-korg