Merge "Sonar Fixes - CadiAuthFilter.java"
[music.git] / src / main / java / org / onap / music / main / CronJobManager.java
index 5b7a8de..0d7d923 100644 (file)
@@ -4,6 +4,8 @@
  * ===================================================================
  *  Copyright (c) 2017 AT&T Intellectual Property
  * ===================================================================
+ *  Modifications Copyright (c) 2019 Samsung
+ * ===================================================================
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
  *  You may obtain a copy of the License at
  * ============LICENSE_END=============================================
  * ====================================================================
  */
+
 package org.onap.music.main;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.Iterator;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-import javax.servlet.annotation.WebListener;
-
+import org.onap.music.authentication.CachingUtil;
 import org.onap.music.datastore.PreparedQueryObject;
+import org.onap.music.eelf.logging.EELFLoggerDelegate;
+import org.onap.music.eelf.logging.format.AppMessages;
+import org.onap.music.eelf.logging.format.ErrorSeverity;
+import org.onap.music.eelf.logging.format.ErrorTypes;
 import org.onap.music.exceptions.MusicLockingException;
 import org.onap.music.exceptions.MusicServiceException;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
 
 import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.Row;
 
-@WebListener
-public class CronJobManager implements ServletContextListener {
+@Component
+public class CronJobManager {
+
+    private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(CronJobManager.class);
 
-    private ScheduledExecutorService scheduler;
+    private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
+
+
+    @Scheduled(cron = "0 0 0 * * ?")
+    public void scheduleTaskWithFixedRate() {
+        logger.info("Executing cronjob to cleanup locks..", dateTimeFormatter.format(LocalDateTime.now()) );
+        deleteLocksFromDB();
+    }
 
-    @Override
-    public void contextInitialized(ServletContextEvent event) {
-        scheduler = Executors.newSingleThreadScheduledExecutor();
-        scheduler.scheduleAtFixedRate(new CachingUtil(), 0, 24, TimeUnit.HOURS);
+    public void deleteLocksFromDB() {
         PreparedQueryObject pQuery = new PreparedQueryObject();
         String consistency = MusicUtil.EVENTUAL;
         pQuery.appendQueryString("CREATE TABLE IF NOT EXISTS admin.locks ( lock_id text PRIMARY KEY, ctime text)");
         try {
             ResultType result = MusicCore.nonKeyRelatedPut(pQuery, consistency);
+            if ( result.equals(ResultType.FAILURE)) {
+                logger.error(EELFLoggerDelegate.errorLogger,"Error creating Admin.locks table.",AppMessages.QUERYERROR,ErrorSeverity.CRITICAL, ErrorTypes.QUERYERROR);
+            }
         } catch (MusicServiceException e1) {
-            e1.printStackTrace();
+            logger.error(EELFLoggerDelegate.errorLogger,e1,AppMessages.QUERYERROR,ErrorSeverity.CRITICAL, ErrorTypes.QUERYERROR);
         }
-        
+
         pQuery = new PreparedQueryObject();
         pQuery.appendQueryString(
                         "select * from admin.locks");
@@ -65,74 +77,27 @@ public class CronJobManager implements ServletContextListener {
                 StringBuilder deleteKeys = new StringBuilder();
                 Boolean expiredKeys = false;
                 while (it.hasNext()) {
-                    Row row = (Row) it.next();
+                    Row row = it.next();
                     String id = row.getString("lock_id");
                     long ctime = Long.parseLong(row.getString("ctime"));
                     if(System.currentTimeMillis() >= ctime + 24 * 60 * 60 * 1000) {
                         expiredKeys = true;
                         String new_id = id.substring(1);
-                        MusicCore.deleteLock(new_id);
-                        deleteKeys.append(id).append(",");
-                    }
-                    else {
-                        MusicUtil.zkNodeMap.put(id, ctime);
+                        try {
+                            MusicCore.deleteLock(new_id);
+                        } catch (MusicLockingException e) {
+                            logger.info(EELFLoggerDelegate.applicationLogger,
+                                     e.getMessage());
+                        }
+                        deleteKeys.append("'").append(id).append("'").append(",");
                     }
-                };
-                if(expiredKeys) {
-                    deleteKeys.deleteCharAt(deleteKeys.length()-1);
-                    deleteKeysFromDB(deleteKeys);
-               }
-            } catch (MusicServiceException e) {
-                e.printStackTrace();
-            } catch (MusicLockingException e) {
-                e.printStackTrace();
-       }
-       
-      //Zookeeper cleanup
-        scheduler.scheduleAtFixedRate(new Runnable() {
-            @Override
-            public void run() {
-                Iterator<Entry<String, Long>> it = MusicUtil.zkNodeMap.entrySet().iterator();
-                StringBuilder deleteKeys = new StringBuilder();
-                Boolean expiredKeys = false;
-                while (it.hasNext()) {
-                    Map.Entry<String, Long> pair = (Map.Entry<String, Long>)it.next();
-                    long ctime = pair.getValue();
-                   if (System.currentTimeMillis() >= ctime + 24 * 60 * 60 * 1000) {
-                       try {
-                           expiredKeys = true;
-                           String id = pair.getKey();
-                           deleteKeys.append("'").append(id).append("'").append(",");
-                           MusicCore.deleteLock(id.substring(1));
-                           MusicUtil.zkNodeMap.remove(id);
-                           
-                       } catch (MusicLockingException e) {
-                          e.printStackTrace();
-                       }
-                   }
                 }
                 if(expiredKeys) {
                     deleteKeys.deleteCharAt(deleteKeys.length()-1);
-                    deleteKeysFromDB(deleteKeys);
+                    CachingUtil.deleteKeysFromDB(deleteKeys.toString());
                }
+            } catch (MusicServiceException e) {
+                logger.error(EELFLoggerDelegate.errorLogger,e,AppMessages.CACHEERROR,ErrorSeverity.CRITICAL, ErrorTypes.DATAERROR);
             }
-        } , 0, 24, TimeUnit.HOURS);
-    }
-
-    @Override
-    public void contextDestroyed(ServletContextEvent event) {
-        scheduler.shutdownNow();
     }
-    
-    public void deleteKeysFromDB(StringBuilder deleteKeys) {
-        PreparedQueryObject pQuery = new PreparedQueryObject();
-        pQuery.appendQueryString(
-                        "DELETE FROM admin.locks WHERE lock_id IN ("+deleteKeys+")");
-        try {
-            MusicCore.nonKeyRelatedPut(pQuery, "eventual");
-        } catch (Exception e) {
-              e.printStackTrace();
-        }
-    }
-
 }