Refactor Prov DB handling
[dmaap/datarouter.git] / datarouter-prov / src / main / java / org / onap / dmaap / datarouter / provisioning / StatisticsServlet.java
index fcdca0a..76991ca 100755 (executable)
@@ -42,8 +42,8 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;\r
 import org.json.JSONException;\r
 import org.onap.dmaap.datarouter.provisioning.beans.EventLogRecord;\r
-import org.onap.dmaap.datarouter.provisioning.utils.DB;\r
 import org.onap.dmaap.datarouter.provisioning.utils.LOGJSONObject;\r
+import org.onap.dmaap.datarouter.provisioning.utils.ProvDbUtils;\r
 \r
 \r
 /**\r
@@ -63,6 +63,21 @@ public class StatisticsServlet extends BaseServlet {
     private static final String FMT2 = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";\r
     public static final String FEEDID = "FEEDID";\r
 \r
+    //sql Strings\r
+    private static final String SQL_SELECT_NAME = "SELECT (SELECT NAME FROM FEEDS AS f WHERE f.FEEDID in(";\r
+    private static final String SQL_FEED_ID = ") and f.FEEDID=e.FEEDID) AS FEEDNAME, e.FEEDID as FEEDID, ";\r
+    private static final String SQL_SELECT_COUNT = "(SELECT COUNT(*) FROM LOG_RECORDS AS c WHERE c.FEEDID in(";\r
+    private static final String SQL_TYPE_PUB = ") and c.FEEDID=e.FEEDID AND c.TYPE='PUB') AS FILES_PUBLISHED,";\r
+    private static final String SQL_SELECT_SUM = "(SELECT SUM(content_length) FROM LOG_RECORDS AS c WHERE c.FEEDID in(";\r
+    private static final String SQL_PUBLISH_LENGTH = ") and c.FEEDID=e.FEEDID AND c.TYPE='PUB') AS PUBLISH_LENGTH, COUNT(e.EVENT_TIME) as FILES_DELIVERED,";\r
+    private static final String SQL_SUBSCRIBER_URL = " sum(m.content_length) as DELIVERED_LENGTH, SUBSTRING_INDEX(e.REQURI,'/',+3) as SUBSCRIBER_URL,";\r
+    private static final String SQL_SUB_ID = " e.DELIVERY_SUBID as SUBID, ";\r
+    private static final String SQL_DELIVERY_TIME = " e.EVENT_TIME AS PUBLISH_TIME, m.EVENT_TIME AS DELIVERY_TIME, ";\r
+    private static final String SQL_AVERAGE_DELAY = " AVG(e.EVENT_TIME - m.EVENT_TIME)/1000 as AverageDelay FROM LOG_RECORDS";\r
+    private static final String SQL_JOIN_RECORDS = " e JOIN LOG_RECORDS m ON m.PUBLISH_ID = e.PUBLISH_ID AND e.FEEDID IN (";\r
+    private static final String SQL_STATUS_204 = " AND m.STATUS=204 AND e.RESULT=204 ";\r
+    private static final String SQL_GROUP_SUB_ID = " group by SUBID";\r
+\r
 \r
     /**\r
      * DELETE a logging URL -- not supported.\r
@@ -86,7 +101,7 @@ public class StatisticsServlet extends BaseServlet {
         Map<String, String> map = buildMapFromRequest(req);\r
         if (map.get("err") != null) {\r
             sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST,\r
-                    "Invalid arguments: " + map.get("err"), eventlogger);\r
+                "Invalid arguments: " + map.get("err"), eventlogger);\r
             return;\r
         }\r
         // check Accept: header??\r
@@ -108,7 +123,7 @@ public class StatisticsServlet extends BaseServlet {
             try {\r
                 groupid1 = this.getFeedIdsByGroupId(Integer.parseInt(req.getParameter(GROUPID)));\r
                 map.put(FEEDIDS, groupid1.toString());\r
-            } catch (NumberFormatException | SQLException e) {\r
+            } catch (NumberFormatException e) {\r
                 eventlogger.error("PROV0172 StatisticsServlet.doGet: " + e.getMessage(), e);\r
             }\r
         }\r
@@ -119,7 +134,7 @@ public class StatisticsServlet extends BaseServlet {
                 groupid1.append(",");\r
                 groupid1.append(req.getParameter(FEEDID).replace("|", ","));\r
                 map.put(FEEDIDS, groupid1.toString());\r
-            } catch (NumberFormatException | SQLException e) {\r
+            } catch (NumberFormatException e) {\r
                 eventlogger.error("PROV0173 StatisticsServlet.doGet: " + e.getMessage(), e);\r
             }\r
         }\r
@@ -169,7 +184,7 @@ public class StatisticsServlet extends BaseServlet {
      * @throws IOException input/output exception\r
      * @throws SQLException SQL exception\r
      */\r
-    public void rsToCSV(ResultSet rs, ServletOutputStream out) throws IOException, SQLException {\r
+    private void rsToCSV(ResultSet rs, ServletOutputStream out) throws IOException, SQLException {\r
         String header = "FEEDNAME,FEEDID,FILES_PUBLISHED,PUBLISH_LENGTH, FILES_DELIVERED, "\r
             + "DELIVERED_LENGTH, SUBSCRIBER_URL, SUBID, PUBLISH_TIME,DELIVERY_TIME, AverageDelay\n";\r
         out.write(header.getBytes());\r
@@ -237,41 +252,24 @@ public class StatisticsServlet extends BaseServlet {
     /**\r
      * getFeedIdsByGroupId - Getting FEEDID's by GROUP ID.\r
      *\r
-     * @throws SQLException Query SQLException.\r
+     * @param groupIds Integer ref of Group\r
      */\r
-    private StringBuilder getFeedIdsByGroupId(int groupIds) throws SQLException {\r
-        DB db = null;\r
-        Connection conn = null;\r
-        ResultSet resultSet = null;\r
-        String sqlGoupid = null;\r
+    private StringBuilder getFeedIdsByGroupId(int groupIds) {\r
         StringBuilder feedIds = new StringBuilder();\r
-        try {\r
-            db = new DB();\r
-            conn = db.getConnection();\r
-            sqlGoupid = " SELECT FEEDID from FEEDS  WHERE GROUPID = ?";\r
-            try (PreparedStatement prepareStatement = conn.prepareStatement(sqlGoupid)) {\r
-                prepareStatement.setInt(1, groupIds);\r
-                resultSet = prepareStatement.executeQuery();\r
+        try (Connection conn = ProvDbUtils.getInstance().getConnection();\r
+            PreparedStatement prepareStatement = conn.prepareStatement(\r
+                " SELECT FEEDID from FEEDS  WHERE GROUPID = ?")) {\r
+            prepareStatement.setInt(1, groupIds);\r
+            try (ResultSet resultSet = prepareStatement.executeQuery()) {\r
                 while (resultSet.next()) {\r
                     feedIds.append(resultSet.getInt(FEEDID));\r
                     feedIds.append(",");\r
                 }\r
-                feedIds.deleteCharAt(feedIds.length() - 1);\r
-                eventlogger.info("PROV0177 StatisticsServlet.getFeedIdsByGroupId: feedIds = " + feedIds.toString());\r
             }\r
+            feedIds.deleteCharAt(feedIds.length() - 1);\r
+            eventlogger.info("PROV0177 StatisticsServlet.getFeedIdsByGroupId: feedIds = " + feedIds.toString());\r
         } catch (SQLException e) {\r
             eventlogger.error("PROV0175 StatisticsServlet.getFeedIdsByGroupId: " + e.getMessage(), e);\r
-        } finally {\r
-            try {\r
-                if (resultSet != null) {\r
-                    resultSet.close();\r
-                }\r
-                if (conn != null) {\r
-                    db.release(conn);\r
-                }\r
-            } catch (Exception e) {\r
-                eventlogger.error("PROV0176 StatisticsServlet.getFeedIdsByGroupId: " + e.getMessage(), e);\r
-            }\r
         }\r
         return feedIds;\r
     }\r
@@ -285,14 +283,11 @@ public class StatisticsServlet extends BaseServlet {
     private String queryGeneretor(Map<String, String> map) throws ParseException {\r
 \r
         String sql;\r
-        String eventType = null;\r
         String feedids = null;\r
         String startTime = null;\r
         String endTime = null;\r
         String subid = " ";\r
-        if (map.get(EVENT_TYPE) != null) {\r
-            eventType =  map.get(EVENT_TYPE);\r
-        }\r
+\r
         if (map.get(FEEDIDS) != null) {\r
             feedids = map.get(FEEDIDS);\r
         }\r
@@ -302,9 +297,6 @@ public class StatisticsServlet extends BaseServlet {
         if (map.get(END_TIME) != null) {\r
             endTime =  map.get(END_TIME);\r
         }\r
-        if ("all".equalsIgnoreCase(eventType)) {\r
-            eventType = "PUB','DEL, EXP, PBF";\r
-        }\r
         if (map.get(SUBID) != null) {\r
             subid = map.get(SUBID);\r
         }\r
@@ -313,20 +305,12 @@ public class StatisticsServlet extends BaseServlet {
 \r
         if (endTime == null && startTime == null) {\r
 \r
-            sql = "SELECT (SELECT NAME FROM FEEDS AS f WHERE f.FEEDID in(" + feedids\r
-                + ") and f.FEEDID=e.FEEDID) AS FEEDNAME, e.FEEDID as FEEDID, "\r
-                + "(SELECT COUNT(*) FROM LOG_RECORDS AS c WHERE c.FEEDID in("\r
-                + feedids\r
-                + ") and c.FEEDID=e.FEEDID AND c.TYPE='PUB') AS FILES_PUBLISHED,(SELECT SUM(content_length)"\r
-                + " FROM LOG_RECORDS AS c WHERE c.FEEDID in("\r
-                + feedids\r
-                + ") and c.FEEDID=e.FEEDID AND c.TYPE='PUB') AS PUBLISH_LENGTH, COUNT(e.EVENT_TIME) as FILES_DELIVERED,"\r
-                + "sum(m.content_length) as DELIVERED_LENGTH,SUBSTRING_INDEX(e.REQURI,'/',+3) as SUBSCRIBER_URL,"\r
-                + " e.DELIVERY_SUBID as SUBID, "\r
-                + "e.EVENT_TIME AS PUBLISH_TIME, m.EVENT_TIME AS DELIVERY_TIME, "\r
-                + " AVG(e.EVENT_TIME - m.EVENT_TIME)/1000 as AverageDelay FROM LOG_RECORDS"\r
-                + " e JOIN LOG_RECORDS m ON m.PUBLISH_ID = e.PUBLISH_ID AND e.FEEDID IN ("\r
-                + feedids + ") " + subid + " AND m.STATUS=204 AND e.RESULT=204  group by SUBID";\r
+            sql =  SQL_SELECT_NAME + feedids + SQL_FEED_ID + SQL_SELECT_COUNT + feedids + SQL_TYPE_PUB\r
+                + SQL_SELECT_SUM\r
+                + feedids + SQL_PUBLISH_LENGTH\r
+                + SQL_SUBSCRIBER_URL + SQL_SUB_ID + SQL_DELIVERY_TIME + SQL_AVERAGE_DELAY + SQL_JOIN_RECORDS\r
+                + feedids + ") " + subid\r
+                + SQL_STATUS_204 + SQL_GROUP_SUB_ID;\r
 \r
             return sql;\r
         } else if (startTime != null && endTime == null) {\r
@@ -336,22 +320,12 @@ public class StatisticsServlet extends BaseServlet {
             long currentTimeInMilli = cal.getTimeInMillis();\r
             long compareTime = currentTimeInMilli - inputTimeInMilli;\r
 \r
-            sql = "SELECT (SELECT NAME FROM FEEDS AS f WHERE f.FEEDID in(" + feedids\r
-                + ") and f.FEEDID=e.FEEDID) AS FEEDNAME, e.FEEDID as FEEDID, "\r
-                + "(SELECT COUNT(*) FROM LOG_RECORDS AS c WHERE c.FEEDID in("\r
-                + feedids\r
-                + ") and c.FEEDID=e.FEEDID AND c.TYPE='PUB') AS FILES_PUBLISHED,"\r
-                + "(SELECT SUM(content_length) FROM LOG_RECORDS AS c WHERE c.FEEDID in("\r
-                + feedids\r
-                + ") and c.FEEDID=e.FEEDID AND c.TYPE='PUB') AS PUBLISH_LENGTH, COUNT(e.EVENT_TIME) as FILES_DELIVERED,"\r
-                + "sum(m.content_length) as DELIVERED_LENGTH,SUBSTRING_INDEX(e.REQURI,'/',+3) as SUBSCRIBER_URL,"\r
-                + " e.DELIVERY_SUBID as SUBID, "\r
-                + "e.EVENT_TIME AS PUBLISH_TIME, m.EVENT_TIME AS DELIVERY_TIME,  "\r
-                + "AVG(e.EVENT_TIME - m.EVENT_TIME)/1000 as AverageDelay "\r
-                + "FROM LOG_RECORDS e JOIN LOG_RECORDS m ON m.PUBLISH_ID = e.PUBLISH_ID AND e.FEEDID IN ("\r
-                + feedids + ") " + subid + " AND m.STATUS=204 AND e.RESULT=204 and e.event_time>="\r
-                + compareTime + " group by SUBID";\r
-\r
+            sql = SQL_SELECT_NAME + feedids + SQL_FEED_ID + SQL_SELECT_COUNT + feedids + SQL_TYPE_PUB\r
+                + SQL_SELECT_SUM\r
+                + feedids + SQL_PUBLISH_LENGTH\r
+                + SQL_SUBSCRIBER_URL + SQL_SUB_ID + SQL_DELIVERY_TIME + SQL_AVERAGE_DELAY + SQL_JOIN_RECORDS\r
+                + feedids + ") " + subid\r
+                + SQL_STATUS_204 + " and e.event_time>=" + compareTime + SQL_GROUP_SUB_ID;\r
             return sql;\r
 \r
         } else {\r
@@ -362,23 +336,11 @@ public class StatisticsServlet extends BaseServlet {
             long startInMillis = startDate.getTime();\r
             long endInMillis = endDate.getTime();\r
 \r
-            sql = "SELECT (SELECT NAME FROM FEEDS AS f WHERE f.FEEDID in(" + feedids\r
-                + ") and f.FEEDID=e.FEEDID) AS FEEDNAME, e.FEEDID as FEEDID, "\r
-                          + "(SELECT COUNT(*) FROM LOG_RECORDS AS c WHERE c.FEEDID in("\r
-                + feedids\r
-                + ") and c.FEEDID=e.FEEDID AND c.TYPE='PUB') AS FILES_PUBLISHED,"\r
-                          + "(SELECT SUM(content_length) FROM LOG_RECORDS AS c WHERE c.FEEDID in("\r
-                + feedids\r
-                + ") and c.FEEDID=e.FEEDID AND c.TYPE='PUB') AS PUBLISH_LENGTH, COUNT(e.EVENT_TIME) as FILES_DELIVERED,"\r
-                          + "sum(m.content_length) as DELIVERED_LENGTH,"\r
-                          + "SUBSTRING_INDEX(e.REQURI,'/',+3) as SUBSCRIBER_URL,"\r
-                          + "e.DELIVERY_SUBID as SUBID, "\r
-                          + "e.EVENT_TIME AS PUBLISH_TIME, m.EVENT_TIME AS DELIVERY_TIME,  "\r
-                          + "AVG(e.EVENT_TIME - m.EVENT_TIME)/1000 as AverageDelay FROM LOG_RECORDS"\r
-                          + " e JOIN LOG_RECORDS m ON m.PUBLISH_ID = e.PUBLISH_ID AND e.FEEDID IN ("\r
-                + feedids + ")" + subid + " AND m.STATUS=204 AND e.RESULT=204 and e.event_time between " + startInMillis\r
-                + " and " + endInMillis + " group by SUBID";\r
-\r
+            sql = SQL_SELECT_NAME + feedids + SQL_FEED_ID + SQL_SELECT_COUNT + feedids + SQL_TYPE_PUB\r
+                + SQL_SELECT_SUM\r
+                + feedids + SQL_PUBLISH_LENGTH + SQL_SUBSCRIBER_URL\r
+                + SQL_SUB_ID + SQL_DELIVERY_TIME + SQL_AVERAGE_DELAY + SQL_JOIN_RECORDS + feedids + ")" + subid + SQL_STATUS_204\r
+                +" and e.event_time between " + startInMillis + " and " + endInMillis + SQL_GROUP_SUB_ID;\r
 \r
             return sql;\r
         }\r
@@ -538,29 +500,27 @@ public class StatisticsServlet extends BaseServlet {
     }\r
 \r
     private void getRecordsForSQL(Map<String, String> map, String outputType, ServletOutputStream out,\r
-            HttpServletResponse resp) {\r
+        HttpServletResponse resp) {\r
         try {\r
             String filterQuery = this.queryGeneretor(map);\r
             eventlogger.debug("SQL Query for Statistics resultset. " + filterQuery);\r
             intlogger.debug(filterQuery);\r
             long start = System.currentTimeMillis();\r
-            DB db = new DB();\r
-            try (Connection conn = db.getConnection()) {\r
-                try (ResultSet rs = conn.prepareStatement(filterQuery).executeQuery()) {\r
-                    if ("csv".equals(outputType)) {\r
-                        resp.setContentType("application/octet-stream");\r
-                        Date date = new Date();\r
-                        SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-YYYY HH:mm:ss");\r
-                        resp.setHeader("Content-Disposition",\r
-                            "attachment; filename=\"result:" + dateFormat.format(date) + ".csv\"");\r
-                        eventlogger.info("Generating CSV file from Statistics resultset");\r
-                        rsToCSV(rs, out);\r
-                    } else {\r
-                        eventlogger.info("Generating JSON for Statistics resultset");\r
-                        this.rsToJson(rs, out);\r
-                    }\r
+            try (Connection conn = ProvDbUtils.getInstance().getConnection();\r
+                PreparedStatement ps = conn.prepareStatement(filterQuery);\r
+                ResultSet rs = ps.executeQuery()) {\r
+                if ("csv".equals(outputType)) {\r
+                    resp.setContentType("application/octet-stream");\r
+                    Date date = new Date();\r
+                    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-YYYY HH:mm:ss");\r
+                    resp.setHeader("Content-Disposition",\r
+                        "attachment; filename=\"result:" + dateFormat.format(date) + ".csv\"");\r
+                    eventlogger.info("Generating CSV file from Statistics resultset");\r
+                    rsToCSV(rs, out);\r
+                } else {\r
+                    eventlogger.info("Generating JSON for Statistics resultset");\r
+                    this.rsToJson(rs, out);\r
                 }\r
-                db.release(conn);\r
             } catch (SQLException e) {\r
                 eventlogger.error("SQLException:" + e);\r
             }\r