Remove critical code smells for utils classes
[dmaap/datarouter.git] / datarouter-prov / src / main / java / org / onap / dmaap / datarouter / provisioning / utils / LogfileLoader.java
index ff7893d..3ba1a15 100644 (file)
@@ -46,7 +46,8 @@ import java.util.Map;
 import java.util.TreeSet;\r
 import java.util.zip.GZIPInputStream;\r
 \r
-import org.apache.log4j.Logger;\r
+import com.att.eelf.configuration.EELFLogger;\r
+import com.att.eelf.configuration.EELFManager;\r
 import org.onap.dmaap.datarouter.provisioning.BaseServlet;\r
 import org.onap.dmaap.datarouter.provisioning.beans.DeliveryExtraRecord;\r
 import org.onap.dmaap.datarouter.provisioning.beans.DeliveryRecord;\r
@@ -82,7 +83,7 @@ public class LogfileLoader extends Thread {
     /**\r
      * This is a singleton -- there is only one LogfileLoader object in the server\r
      */\r
-    private static LogfileLoader p;\r
+    private static LogfileLoader logfileLoader;\r
 \r
     /**\r
      * Get the singleton LogfileLoader object, and start it if it is not running.\r
@@ -90,23 +91,23 @@ public class LogfileLoader extends Thread {
      * @return the LogfileLoader\r
      */\r
     public static synchronized LogfileLoader getLoader() {\r
-        if (p == null)\r
-            p = new LogfileLoader();\r
-        if (!p.isAlive())\r
-            p.start();\r
-        return p;\r
+        if (logfileLoader == null)\r
+            logfileLoader = new LogfileLoader();\r
+        if (!logfileLoader.isAlive())\r
+            logfileLoader.start();\r
+        return logfileLoader;\r
     }\r
 \r
     /**\r
      * The PreparedStatement which is loaded by a <i>Loadable</i>.\r
      */\r
-    public static final String INSERT_SQL = "insert into LOG_RECORDS values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";\r
+    public static final String INSERT_SQL = "insert into LOG_RECORDS values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";\r
     /**\r
      * Each server can assign this many IDs\r
      */\r
     private static final long SET_SIZE = (1L << 56);\r
 \r
-    private final Logger logger;\r
+    private final EELFLogger logger;\r
     private final DB db;\r
     private final String spooldir;\r
     private final long set_start;\r
@@ -116,7 +117,7 @@ public class LogfileLoader extends Thread {
     private boolean idle;\r
 \r
     private LogfileLoader() {\r
-        this.logger = Logger.getLogger("org.onap.dmaap.datarouter.provisioning.internal");\r
+        this.logger = EELFManager.getInstance().getLogger("InternalLog");\r
         this.db = new DB();\r
         this.spooldir = db.getProperties().getProperty("org.onap.dmaap.datarouter.provserver.spooldir");\r
         this.set_start = getIdRange();\r
@@ -188,6 +189,7 @@ public class LogfileLoader extends Thread {
                         try {\r
                             Thread.sleep(1000L);\r
                         } catch (InterruptedException e) {\r
+                            Thread.currentThread().interrupt();\r
                         }\r
                         idle = false;\r
                     } else {\r
@@ -213,12 +215,11 @@ public class LogfileLoader extends Thread {
                 }\r
             } catch (Exception e) {\r
                 logger.warn("PROV0020: Caught exception in LogfileLoader: " + e);\r
-                e.printStackTrace();\r
             }\r
         }\r
     }\r
 \r
-    private boolean pruneRecords() {\r
+    boolean pruneRecords() {\r
         boolean did1 = false;\r
         long count = countRecords();\r
         long threshold = DEFAULT_LOG_RETENTION;\r
@@ -254,27 +255,27 @@ public class LogfileLoader extends Thread {
             try {\r
                 // Limit to a million at a time to avoid typing up the DB for too long.\r
                 conn = db.getConnection();\r
-                PreparedStatement ps = conn.prepareStatement("DELETE from LOG_RECORDS where EVENT_TIME < ? limit 1000000");\r
-                ps.setLong(1, cutoff);\r
-                while (count > 0) {\r
-                    if (!ps.execute()) {\r
-                        int dcount = ps.getUpdateCount();\r
-                        count -= dcount;\r
-                        logger.debug("  " + dcount + " rows deleted.");\r
-                        did1 |= (dcount != 0);\r
-                        if (dcount == 0)\r
-                            count = 0;    // prevent inf. loops\r
-                    } else {\r
-                        count = 0;    // shouldn't happen!\r
+                try(PreparedStatement ps = conn.prepareStatement("DELETE from LOG_RECORDS where EVENT_TIME < ? limit 1000000")) {\r
+                    ps.setLong(1, cutoff);\r
+                    while (count > 0) {\r
+                        if (!ps.execute()) {\r
+                            int dcount = ps.getUpdateCount();\r
+                            count -= dcount;\r
+                            logger.debug("  " + dcount + " rows deleted.");\r
+                            did1 |= (dcount != 0);\r
+                            if (dcount == 0)\r
+                                count = 0;    // prevent inf. loops\r
+                        } else {\r
+                            count = 0;    // shouldn't happen!\r
+                        }\r
                     }\r
                 }\r
-                ps.close();\r
-                Statement stmt = conn.createStatement();\r
-                stmt.execute("OPTIMIZE TABLE LOG_RECORDS");\r
-                stmt.close();\r
+             try(Statement stmt = conn.createStatement()) {\r
+                 stmt.execute("OPTIMIZE TABLE LOG_RECORDS");\r
+             }\r
             } catch (SQLException e) {\r
                 System.err.println(e);\r
-                e.printStackTrace();\r
+                logger.error(e.toString());\r
             } finally {\r
                 db.release(conn);\r
             }\r
@@ -282,46 +283,46 @@ public class LogfileLoader extends Thread {
         return did1;\r
     }\r
 \r
-    private long countRecords() {\r
+    long countRecords() {\r
         long count = 0;\r
         Connection conn = null;\r
         try {\r
             conn = db.getConnection();\r
-            Statement stmt = conn.createStatement();\r
-            ResultSet rs = stmt.executeQuery("SELECT COUNT(*) as COUNT from LOG_RECORDS");\r
-            if (rs.next()) {\r
-                count = rs.getLong("COUNT");\r
-            }\r
-            rs.close();\r
-            stmt.close();\r
-        } catch (SQLException e) {\r
+           try(Statement stmt = conn.createStatement()) {\r
+               try(ResultSet rs = stmt.executeQuery("SELECT COUNT(*) as COUNT from LOG_RECORDS")) {\r
+                   if (rs.next()) {\r
+                       count = rs.getLong("COUNT");\r
+                   }\r
+               }\r
+           }\r
+         } catch (SQLException e) {\r
             System.err.println(e);\r
-            e.printStackTrace();\r
+            logger.error(e.toString());\r
         } finally {\r
             db.release(conn);\r
         }\r
         return count;\r
     }\r
 \r
-    private Map<Long, Long> getHistogram() {\r
+    Map<Long, Long> getHistogram() {\r
         Map<Long, Long> map = new HashMap<Long, Long>();\r
         Connection conn = null;\r
         try {\r
             logger.debug("  LOG_RECORD table histogram...");\r
             conn = db.getConnection();\r
-            Statement stmt = conn.createStatement();\r
-            ResultSet rs = stmt.executeQuery("SELECT FLOOR(EVENT_TIME/86400000) AS DAY, COUNT(*) AS COUNT FROM LOG_RECORDS GROUP BY DAY");\r
-            while (rs.next()) {\r
-                long day = rs.getLong("DAY");\r
-                long cnt = rs.getLong("COUNT");\r
-                map.put(day, cnt);\r
-                logger.debug("  " + day + "  " + cnt);\r
+            try(Statement stmt = conn.createStatement()) {\r
+                try(ResultSet rs = stmt.executeQuery("SELECT FLOOR(EVENT_TIME/86400000) AS DAY, COUNT(*) AS COUNT FROM LOG_RECORDS GROUP BY DAY")) {\r
+                    while (rs.next()) {\r
+                        long day = rs.getLong("DAY");\r
+                        long cnt = rs.getLong("COUNT");\r
+                        map.put(day, cnt);\r
+                        logger.debug("  " + day + "  " + cnt);\r
+                    }\r
+                }\r
             }\r
-            rs.close();\r
-            stmt.close();\r
-        } catch (SQLException e) {\r
+           } catch (SQLException e) {\r
             System.err.println(e);\r
-            e.printStackTrace();\r
+            logger.error(e.toString());\r
         } finally {\r
             db.release(conn);\r
         }\r
@@ -332,26 +333,25 @@ public class LogfileLoader extends Thread {
         Connection conn = null;\r
         try {\r
             conn = db.getConnection();\r
-            Statement stmt = conn.createStatement();\r
-            // Build a bitset of all records in the LOG_RECORDS table\r
-            // We need to run this SELECT in stages, because otherwise we run out of memory!\r
             RLEBitSet nbs = new RLEBitSet();\r
-            final long stepsize = 6000000L;\r
-            boolean go_again = true;\r
-            for (long i = 0; go_again; i += stepsize) {\r
-                String sql = String.format("select RECORD_ID from LOG_RECORDS LIMIT %d,%d", i, stepsize);\r
-                ResultSet rs = stmt.executeQuery(sql);\r
-                go_again = false;\r
-                while (rs.next()) {\r
-                    long n = rs.getLong("RECORD_ID");\r
-                    nbs.set(n);\r
-                    go_again = true;\r
+            try(Statement stmt = conn.createStatement()) {\r
+                // Build a bitset of all records in the LOG_RECORDS table\r
+                // We need to run this SELECT in stages, because otherwise we run out of memory!\r
+                final long stepsize = 6000000L;\r
+                boolean go_again = true;\r
+                for (long i = 0; go_again; i += stepsize) {\r
+                    String sql = String.format("select RECORD_ID from LOG_RECORDS LIMIT %d,%d", i, stepsize);\r
+                    try (ResultSet rs = stmt.executeQuery(sql)) {\r
+                        go_again = false;\r
+                        while (rs.next()) {\r
+                            long n = rs.getLong("RECORD_ID");\r
+                            nbs.set(n);\r
+                            go_again = true;\r
+                        }\r
+                    }\r
                 }\r
-                rs.close();\r
             }\r
-            stmt.close();\r
             seq_set = nbs;\r
-\r
             // Compare with the range for this server\r
             // Determine the next ID for this set of record IDs\r
             RLEBitSet tbs = (RLEBitSet) nbs.clone();\r
@@ -376,14 +376,14 @@ public class LogfileLoader extends Thread {
             logger.debug(String.format("initializeNextid, next ID is %d (%x)", nextid, nextid));\r
         } catch (SQLException e) {\r
             System.err.println(e);\r
-            e.printStackTrace();\r
+            logger.error(e.toString());\r
         } finally {\r
             db.release(conn);\r
         }\r
     }\r
 \r
     @SuppressWarnings("resource")\r
-    private int[] process(File f) {\r
+    int[] process(File f) {\r
         int ok = 0, total = 0;\r
         try {\r
             Connection conn = db.getConnection();\r
@@ -391,49 +391,45 @@ public class LogfileLoader extends Thread {
             Reader r = f.getPath().endsWith(".gz")\r
                     ? new InputStreamReader(new GZIPInputStream(new FileInputStream(f)))\r
                     : new FileReader(f);\r
-            LineNumberReader in = new LineNumberReader(r);\r
-            String line;\r
-            while ((line = in.readLine()) != null) {\r
-                try {\r
-                    for (Loadable rec : buildRecords(line)) {\r
-                        rec.load(ps);\r
-                        if (rec instanceof LogRecord) {\r
-                            LogRecord lr = ((LogRecord) rec);\r
-                            if (!seq_set.get(lr.getRecordId())) {\r
+            try(LineNumberReader in = new LineNumberReader(r)) {\r
+                String line;\r
+                while ((line = in.readLine()) != null) {\r
+                    try {\r
+                        for (Loadable rec : buildRecords(line)) {\r
+                            rec.load(ps);\r
+                            if (rec instanceof LogRecord) {\r
+                                LogRecord lr = ((LogRecord) rec);\r
+                                if (!seq_set.get(lr.getRecordId())) {\r
+                                    ps.executeUpdate();\r
+                                    seq_set.set(lr.getRecordId());\r
+                                } else\r
+                                    logger.debug("Duplicate record ignored: " + lr.getRecordId());\r
+                            } else {\r
+                                if (++nextid > set_end)\r
+                                    nextid = set_start;\r
+                                ps.setLong(18, nextid);\r
                                 ps.executeUpdate();\r
-                                seq_set.set(lr.getRecordId());\r
-                            } else\r
-                                logger.debug("Duplicate record ignored: " + lr.getRecordId());\r
-                        } else {\r
-                            if (++nextid > set_end)\r
-                                nextid = set_start;\r
-                            ps.setLong(18, nextid);\r
-                            ps.executeUpdate();\r
-                            seq_set.set(nextid);\r
+                                seq_set.set(nextid);\r
+                            }\r
+                            ps.clearParameters();\r
+                            ok++;\r
                         }\r
-                        ps.clearParameters();\r
-                        ok++;\r
+                    } catch (SQLException e) {\r
+                        logger.warn("PROV8003 Invalid value in record: " + line);\r
+                        logger.debug(e.toString(), e);\r
+                    } catch (NumberFormatException e) {\r
+                        logger.warn("PROV8004 Invalid number in record: " + line);\r
+                        logger.debug(e.toString());\r
+                    } catch (ParseException e) {\r
+                        logger.warn("PROV8005 Invalid date in record: " + line);\r
+                        logger.debug(e.toString());\r
+                    } catch (Exception e) {\r
+                        logger.warn("PROV8006 Invalid pattern in record: " + line);\r
+                        logger.debug(e.toString(), e);\r
                     }\r
-                } catch (SQLException e) {\r
-                    logger.warn("PROV8003 Invalid value in record: " + line);\r
-                    logger.debug(e);\r
-                    e.printStackTrace();\r
-                } catch (NumberFormatException e) {\r
-                    logger.warn("PROV8004 Invalid number in record: " + line);\r
-                    logger.debug(e);\r
-                    e.printStackTrace();\r
-                } catch (ParseException e) {\r
-                    logger.warn("PROV8005 Invalid date in record: " + line);\r
-                    logger.debug(e);\r
-                    e.printStackTrace();\r
-                } catch (Exception e) {\r
-                    logger.warn("PROV8006 Invalid pattern in record: " + line);\r
-                    logger.debug(e);\r
-                    e.printStackTrace();\r
+                    total++;\r
                 }\r
-                total++;\r
             }\r
-            in.close();\r
             ps.close();\r
             db.release(conn);\r
             conn = null;\r
@@ -447,7 +443,7 @@ public class LogfileLoader extends Thread {
         return new int[]{ok, total};\r
     }\r
 \r
-    private Loadable[] buildRecords(String line) throws ParseException {\r
+    Loadable[] buildRecords(String line) throws ParseException {\r
         String[] pp = line.split("\\|");\r
         if (pp != null && pp.length >= 7) {\r
             String rtype = pp[1].toUpperCase();\r