Refactor Prov DB handling
[dmaap/datarouter.git] / datarouter-prov / src / main / java / org / onap / dmaap / datarouter / reports / LatencyReport.java
index c213c03..f98116d 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
@@ -32,8 +32,7 @@ import java.sql.ResultSet;
 import java.sql.SQLException;\r
 import java.util.ArrayList;\r
 import java.util.List;\r
-\r
-import org.onap.dmaap.datarouter.provisioning.utils.DB;\r
+import org.onap.dmaap.datarouter.provisioning.utils.ProvDbUtils;\r
 \r
 /**\r
  * Generate a per-file latency report.  It reports on the details related to one file published\r
@@ -54,126 +53,128 @@ import org.onap.dmaap.datarouter.provisioning.utils.DB;
  * @version $Id: LatencyReport.java,v 1.1 2013/10/28 18:06:53 eby Exp $\r
  */\r
 public class LatencyReport 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 <= ? order by PUBLISH_ID, EVENT_TIME";\r
-\r
-       private class Event {\r
-               public final String type;\r
-               public final long time;\r
-               public Event(String t, long tm) {\r
-                       type = t;\r
-                       time = tm;\r
-               }\r
-       }\r
-       private class Counters {\r
-               public final String id;\r
-               public final int feedid;\r
-               public final long clen;\r
-               public final String fileid;\r
-               public final List<Event> events;\r
-               public Counters(String i, int fid, long c, String s) {\r
-                       id = i;\r
-                       feedid = fid;\r
-                       clen = c;\r
-                       fileid = s;\r
-                       events = new ArrayList<Event>();\r
-               }\r
-               private long pubtime;\r
-               public void addEvent(String t, long tm) {\r
-                       events.add(new Event(t, tm));\r
-                       if (t.equals("pub"))\r
-                               pubtime = tm;\r
-               }\r
-               public long min() {\r
-                       long min = Long.MAX_VALUE;\r
-                       for (Event e : events) {\r
-                               if (e.type.equals("del")) {\r
-                                       min = Math.min(min, e.time - pubtime);\r
-                               }\r
-                       }\r
-                       return min;\r
-               }\r
-               public long max() {\r
-                       long max = 0;\r
-                       for (Event e : events) {\r
-                               if (e.type.equals("del")) {\r
-                                       max = Math.max(max, e.time - pubtime);\r
-                               }\r
-                       }\r
-                       return max;\r
-               }\r
-               public long avg() {\r
-                       long total = 0, c = 0;\r
-                       for (Event e : events) {\r
-                               if (e.type.equals("del")) {\r
-                                       total += e.time - pubtime;\r
-                                       c++;\r
-                               }\r
-                       }\r
-                       return (c == 0) ? 0 : total/c;\r
-               }\r
-               public int fanout() {\r
-                       int n = 0;\r
-                       for (Event e : events) {\r
-                               if (e.type.equals("del")) {\r
-                                       n++;\r
-                               }\r
-                       }\r
-                       return n;\r
-               }\r
-               @Override\r
-               public String toString() {\r
-                       return feedid + "," + fileid + "," + clen + "," + min() + "," + max() + "," + avg() + "," + fanout();\r
-               }\r
-       }\r
-\r
-       @Override\r
-       public void run() {\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
-                       PrintWriter os = new PrintWriter(outfile);\r
-                       os.println("recordid,feedid,uri,size,min,max,avg,fanout");\r
-                       Counters c = null;\r
-                       while (rs.next()) {\r
-                               long etime  = rs.getLong("EVENT_TIME");\r
-                               String type = rs.getString("TYPE");\r
-                               String id   = rs.getString("PUBLISH_ID");\r
-                               String fid  = rs.getString("FEED_FILEID");\r
-                               int feed    = rs.getInt("FEEDID");\r
-                               long clen   = rs.getLong("CONTENT_LENGTH");\r
-                               if (c != null && !id.equals(c.id)) {\r
-                                       String line = id + "," + c.toString();\r
-                                       os.println(line);\r
-                                       c = null;\r
-                               }\r
-                               if (c == null) {\r
-                                       c = new Counters(id, feed, clen, fid);\r
-                               }\r
-                               if (feed != c.feedid)\r
-                                       System.err.println("Feed ID mismatch, "+feed+" <=> "+c.feedid);\r
-                               if (clen != c.clen)\r
-                                       System.err.println("Cont Len mismatch, "+clen+" <=> "+c.clen);\r
-//                             if (fid != c.fileid)\r
-//                                     System.err.println("File ID mismatch, "+fid+" <=> "+c.fileid);\r
-                               c.addEvent(type, etime);\r
-                       }\r
-                       rs.close();\r
-                       ps.close();\r
-                       db.release(conn);\r
-                       os.close();\r
-               } catch (FileNotFoundException e) {\r
-                       System.err.println("File cannot be written: "+outfile);\r
-               } catch (SQLException e) {\r
-                       e.printStackTrace();\r
-               }\r
-               logger.debug("Query time: " + (System.currentTimeMillis()-start) + " ms");\r
-       }\r
+\r
+    private class Event {\r
+        public final String type;\r
+        public final long time;\r
+\r
+        public Event(String t, long tm) {\r
+            type = t;\r
+            time = tm;\r
+        }\r
+    }\r
+\r
+    private class Counters {\r
+        public final String id;\r
+        public final int feedid;\r
+        public final long clen;\r
+        public final String fileid;\r
+        public final List<Event> events;\r
+\r
+        public Counters(String i, int fid, long c, String s) {\r
+            id = i;\r
+            feedid = fid;\r
+            clen = c;\r
+            fileid = s;\r
+            events = new ArrayList<>();\r
+        }\r
+\r
+        private long pubtime;\r
+\r
+        public void addEvent(String t, long tm) {\r
+            events.add(new Event(t, tm));\r
+            if (t.equals("pub"))\r
+                pubtime = tm;\r
+        }\r
+\r
+        public long min() {\r
+            long min = Long.MAX_VALUE;\r
+            for (Event e : events) {\r
+                if (e.type.equals("del")) {\r
+                    min = Math.min(min, e.time - pubtime);\r
+                }\r
+            }\r
+            return min;\r
+        }\r
+\r
+        public long max() {\r
+            long max = 0;\r
+            for (Event e : events) {\r
+                if (e.type.equals("del")) {\r
+                    max = Math.max(max, e.time - pubtime);\r
+                }\r
+            }\r
+            return max;\r
+        }\r
+\r
+        public long avg() {\r
+            long total = 0, c = 0;\r
+            for (Event e : events) {\r
+                if (e.type.equals("del")) {\r
+                    total += e.time - pubtime;\r
+                    c++;\r
+                }\r
+            }\r
+            return (c == 0) ? 0 : total / c;\r
+        }\r
+\r
+        public int fanout() {\r
+            int n = 0;\r
+            for (Event e : events) {\r
+                if (e.type.equals("del")) {\r
+                    n++;\r
+                }\r
+            }\r
+            return n;\r
+        }\r
+\r
+        @Override\r
+        public String toString() {\r
+            return feedid + "," + fileid + "," + clen + "," + min() + "," + max() + "," + avg() + "," + fanout();\r
+        }\r
+    }\r
+\r
+    @Override\r
+    public void run() {\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, CONTENT_LENGTH from LOG_RECORDS where "\r
+                    + "EVENT_TIME >= ? and EVENT_TIME <= ? order by PUBLISH_ID, EVENT_TIME")) {\r
+            ps.setLong(1, from);\r
+            ps.setLong(2, to);\r
+            try(ResultSet rs = ps.executeQuery()) {\r
+                try (PrintWriter os = new PrintWriter(outfile)) {\r
+                    os.println("recordid,feedid,uri,size,min,max,avg,fanout");\r
+                    Counters c = null;\r
+                    while (rs.next()) {\r
+                        long etime = rs.getLong("EVENT_TIME");\r
+                        String type = rs.getString("TYPE");\r
+                        String id = rs.getString("PUBLISH_ID");\r
+                        String fid = rs.getString("FEED_FILEID");\r
+                        int feed = rs.getInt("FEEDID");\r
+                        long clen = rs.getLong("CONTENT_LENGTH");\r
+                        if (c != null && !id.equals(c.id)) {\r
+                            String line = id + "," + c.toString();\r
+                            os.println(line);\r
+                            c = null;\r
+                        }\r
+                        if (c == null) {\r
+                            c = new Counters(id, feed, clen, fid);\r
+                        }\r
+                        if (feed != c.feedid)\r
+                            System.err.println("Feed ID mismatch, " + feed + " <=> " + c.feedid);\r
+                        if (clen != c.clen)\r
+                            System.err.println("Cont Len mismatch, " + clen + " <=> " + c.clen);\r
+                        c.addEvent(type, etime);\r
+                    }\r
+                }\r
+            }\r
+        } catch (FileNotFoundException e) {\r
+            System.err.println("File cannot be written: " + outfile);\r
+        } catch (SQLException e) {\r
+            logger.error("SQLException: " + e.getMessage());\r
+        }\r
+        logger.debug("Query time: " + (System.currentTimeMillis() - start) + " ms");\r
+    }\r
 }\r