Refactor Prov DB handling
[dmaap/datarouter.git] / datarouter-prov / src / main / java / org / onap / dmaap / datarouter / reports / DailyLatencyReport.java
index cd48e62..3b3b72a 100644 (file)
@@ -7,9 +7,9 @@
  * * Licensed under the Apache License, Version 2.0 (the "License");\r
  * * you may not use this file except in compliance with the License.\r
  * * You may obtain a copy of the License at\r
- * * \r
+ * *\r
  *  *      http://www.apache.org/licenses/LICENSE-2.0\r
- * * \r
+ * *\r
  *  * Unless required by applicable law or agreed to in writing, software\r
  * * distributed under the License is distributed on an "AS IS" BASIS,\r
  * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
@@ -37,8 +37,7 @@ import java.util.HashMap;
 import java.util.List;\r
 import java.util.Map;\r
 import java.util.TreeSet;\r
-\r
-import org.onap.dmaap.datarouter.provisioning.utils.DB;\r
+import org.onap.dmaap.datarouter.provisioning.utils.ProvDbUtils;\r
 \r
 /**\r
  * Generate a daily per feed latency report.  The report is a .csv file containing the following columns:\r
@@ -65,130 +64,136 @@ import org.onap.dmaap.datarouter.provisioning.utils.DB;
  * @version $Id: DailyLatencyReport.java,v 1.2 2013/11/06 16:23:54 eby Exp $\r
  */\r
 public class DailyLatencyReport extends ReportBase {\r
-       private static final String SELECT_SQL =\r
-               "select EVENT_TIME, TYPE, PUBLISH_ID, FEED_FILEID, FEEDID, CONTENT_LENGTH from LOG_RECORDS" +\r
-               " where EVENT_TIME >= ? and EVENT_TIME <= ?";\r
 \r
-       private class Job {\r
-               public long pubtime = 0;\r
-               public long clen = 0;\r
-               public List<Long> deltime = new ArrayList<Long>();\r
-               public long minLatency() {\r
-                       long n = deltime.isEmpty() ? 0 : Long.MAX_VALUE;\r
-                       for (Long l : deltime)\r
-                               n = Math.min(n, l-pubtime);\r
-                       return n;\r
-               }\r
-               public long maxLatency() {\r
-                       long n = 0;\r
-                       for (Long l : deltime)\r
-                               n = Math.max(n, l-pubtime);\r
-                       return n;\r
-               }\r
-               public long totalLatency() {\r
-                       long n = 0;\r
-                       for (Long l : deltime)\r
-                               n += (l-pubtime);\r
-                       return n;\r
-               }\r
-       }\r
-       private class Counters {\r
-               public final String date;\r
-               public final int feedid;\r
-               public final Map<String, Job> jobs;\r
-               public Counters(String d, int fid) {\r
-                       date = d;\r
-                       feedid = fid;\r
-                       jobs = new HashMap<String, Job>();\r
-               }\r
-               public void addEvent(long etime, String type, String id, String fid, long clen) {\r
-                       Job j = jobs.get(id);\r
-                       if (j == null) {\r
-                               j = new Job();\r
-                               jobs.put(id, j);\r
-                       }\r
-                       if (type.equals("pub")) {\r
-                               j.pubtime = getPstart(id);\r
-                               j.clen = clen;\r
-                       } else if (type.equals("del")) {\r
-                               j.deltime.add(etime);\r
-                       }\r
-               }\r
-               @Override\r
-               public String toString() {\r
-                       long minsize = Long.MAX_VALUE, maxsize = 0, avgsize = 0;\r
-                       long minl    = Long.MAX_VALUE, maxl    = 0;\r
-                       long fanout  = 0, totall = 0, totaln = 0;\r
-                       for (Job j : jobs.values()) {\r
-                               minsize = Math.min(minsize, j.clen);\r
-                               maxsize = Math.max(maxsize, j.clen);\r
-                               avgsize += j.clen;\r
-                               minl    = Math.min(minl, j.minLatency());\r
-                               maxl    = Math.max(maxl, j.maxLatency());\r
-                               totall  += j.totalLatency();\r
-                               totaln  += j.deltime.size();\r
-                               fanout  += j.deltime.size();\r
-                       }\r
-                       if (jobs.size() > 0) {\r
-                               avgsize /= jobs.size();\r
-                               fanout  /= jobs.size();\r
-                       }\r
-                       long avgl = (totaln > 0) ? (totall / totaln) : 0;\r
-                       return date + "," + feedid + "," + minsize + "," + maxsize + "," + avgsize + "," + minl + "," + maxl + "," + avgl + "," + fanout;\r
-               }\r
-       }\r
-       private long getPstart(String t) {\r
-               if (t.indexOf('.') > 0)\r
-                       t = t.substring(0, t.indexOf('.'));\r
-               return Long.parseLong(t);\r
-       }\r
+    private class Job {\r
+        private long pubtime = 0;\r
+        private long clen = 0;\r
+        private List<Long> deltime = new ArrayList<>();\r
+        public long minLatency() {\r
+            long n = deltime.isEmpty() ? 0 : Long.MAX_VALUE;\r
+            for (Long l : deltime) {\r
+                n = Math.min(n, l - pubtime);\r
+            }\r
+            return n;\r
+        }\r
+\r
+        public long maxLatency() {\r
+            long n = 0;\r
+            for (Long l : deltime) {\r
+                n = Math.max(n, l - pubtime);\r
+            }\r
+            return n;\r
+        }\r
+\r
+        public long totalLatency() {\r
+            long n = 0;\r
+            for (Long l : deltime) {\r
+                n += (l - pubtime);\r
+            }\r
+            return n;\r
+        }\r
+    }\r
+\r
+    private class Counters {\r
+\r
+        public final String date;\r
+        public final int feedid;\r
+        public final Map<String, Job> jobs;\r
+\r
+        public Counters(String d, int fid) {\r
+            date = d;\r
+            feedid = fid;\r
+            jobs = new HashMap<>();\r
+        }\r
+\r
+        public void addEvent(long etime, String type, String id, String fid, long clen) {\r
+            Job j = jobs.get(id);\r
+            if (j == null) {\r
+                j = new Job();\r
+                jobs.put(id, j);\r
+            }\r
+            if (type.equals("pub")) {\r
+                j.pubtime = getPstart(id);\r
+                j.clen = clen;\r
+            } else if (type.equals("del")) {\r
+                j.deltime.add(etime);\r
+            }\r
+        }\r
+\r
+        @Override\r
+        public String toString() {\r
+            long minsize = Long.MAX_VALUE, maxsize = 0, avgsize = 0;\r
+            long minl = Long.MAX_VALUE, maxl = 0;\r
+            long fanout = 0, totall = 0, totaln = 0;\r
+            for (Job j : jobs.values()) {\r
+                minsize = Math.min(minsize, j.clen);\r
+                maxsize = Math.max(maxsize, j.clen);\r
+                avgsize += j.clen;\r
+                minl = Math.min(minl, j.minLatency());\r
+                maxl = Math.max(maxl, j.maxLatency());\r
+                totall += j.totalLatency();\r
+                totaln += j.deltime.size();\r
+                fanout += j.deltime.size();\r
+            }\r
+            if (jobs.size() > 0) {\r
+                avgsize /= jobs.size();\r
+                fanout /= jobs.size();\r
+            }\r
+            long avgl = (totaln > 0) ? (totall / totaln) : 0;\r
+            return date + "," + feedid + "," + minsize + "," + maxsize + "," + avgsize + "," + minl + "," + maxl + ","\r
+                + avgl + "," + fanout;\r
+        }\r
+    }\r
+\r
+    private long getPstart(String t) {\r
+        if (t.indexOf('.') >= 0) {\r
+            t = t.substring(0, t.indexOf('.'));\r
+        }\r
+        return Long.parseLong(t);\r
+    }\r
 \r
-       @Override\r
-       public void run() {\r
-               Map<String, Counters> map = new HashMap<String, Counters>();\r
-               SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");\r
-               long start = System.currentTimeMillis();\r
-               try {\r
-                       DB db = new DB();\r
-                       @SuppressWarnings("resource")\r
-                       Connection conn = db.getConnection();\r
-                       PreparedStatement ps = conn.prepareStatement(SELECT_SQL);\r
-                       ps.setLong(1, from);\r
-                       ps.setLong(2, to);\r
-                       ResultSet rs = ps.executeQuery();\r
-                       while (rs.next()) {\r
-                               String id   = rs.getString("PUBLISH_ID");\r
-                               int feed    = rs.getInt("FEEDID");\r
-                               long etime  = rs.getLong("EVENT_TIME");\r
-                               String type = rs.getString("TYPE");\r
-                               String fid  = rs.getString("FEED_FILEID");\r
-                               long clen   = rs.getLong("CONTENT_LENGTH");\r
-                               String date = sdf.format(new Date(getPstart(id)));\r
-                               String key  = date + "," + feed;\r
-                               Counters c = map.get(key);\r
-                               if (c == null) {\r
-                                       c = new Counters(date, feed);\r
-                                       map.put(key, c);\r
-                               }\r
-                               c.addEvent(etime, type, id, fid, clen);\r
-                       }\r
-                       rs.close();\r
-                       ps.close();\r
-                       db.release(conn);\r
-               } catch (SQLException e) {\r
-                       e.printStackTrace();\r
-               }\r
-               logger.debug("Query time: " + (System.currentTimeMillis()-start) + " ms");\r
-               try {\r
-                       PrintWriter os = new PrintWriter(outfile);\r
-                       os.println("date,feedid,minsize,maxsize,avgsize,minlat,maxlat,avglat,fanout");\r
-                       for (String key : new TreeSet<String>(map.keySet())) {\r
-                               Counters c = map.get(key);\r
-                               os.println(c.toString());\r
-                       }\r
-                       os.close();\r
-               } catch (FileNotFoundException e) {\r
-                       System.err.println("File cannot be written: "+outfile);\r
-               }\r
-       }\r
+    @Override\r
+    public void run() {\r
+        Map<String, Counters> map = new HashMap<>();\r
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");\r
+        long start = System.currentTimeMillis();\r
+        try (Connection conn = ProvDbUtils.getInstance().getConnection();\r
+            PreparedStatement ps = conn.prepareStatement(\r
+                "select EVENT_TIME, TYPE, PUBLISH_ID, FEED_FILEID, FEEDID, "\r
+                    + "CONTENT_LENGTH from LOG_RECORDS where EVENT_TIME >= ? and EVENT_TIME <= ?")) {\r
+            ps.setLong(1, from);\r
+            ps.setLong(2, to);\r
+            try (ResultSet rs = ps.executeQuery()) {\r
+                while (rs.next()) {\r
+                    String id = rs.getString("PUBLISH_ID");\r
+                    int feed = rs.getInt("FEEDID");\r
+                    long etime = rs.getLong("EVENT_TIME");\r
+                    String type = rs.getString("TYPE");\r
+                    String fid = rs.getString("FEED_FILEID");\r
+                    long clen = rs.getLong("CONTENT_LENGTH");\r
+                    String date = sdf.format(new Date(getPstart(id)));\r
+                    String key = date + "," + feed;\r
+                    Counters c = map.get(key);\r
+                    if (c == null) {\r
+                        c = new Counters(date, feed);\r
+                        map.put(key, c);\r
+                    }\r
+                    c.addEvent(etime, type, id, fid, clen);\r
+                }\r
+            }\r
+        } catch (SQLException e) {\r
+            logger.error("SQLException: " + e.getMessage());\r
+        }\r
+        logger.debug("Query time: " + (System.currentTimeMillis() - start) + " ms");\r
+        try (PrintWriter os = new PrintWriter(outfile)) {\r
+            os.println("date,feedid,minsize,maxsize,avgsize,minlat,maxlat,avglat,fanout");\r
+            for (String key : new TreeSet<>(map.keySet())) {\r
+                Counters c = map.get(key);\r
+                os.println(c.toString());\r
+            }\r
+        } catch (FileNotFoundException e) {\r
+            System.err.println("File cannot be written: " + outfile);\r
+            logger.error("FileNotFoundException: " + e.getMessage());\r
+        }\r
+    }\r
 }\r