Refactor Prov DB handling
[dmaap/datarouter.git] / datarouter-prov / src / main / java / org / onap / dmaap / datarouter / provisioning / StatisticsServlet.java
index 9f113ef..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
@@ -70,7 +70,7 @@ public class StatisticsServlet extends BaseServlet {
     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_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
@@ -101,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
@@ -123,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
@@ -134,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
@@ -184,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
@@ -252,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
@@ -323,11 +306,11 @@ public class StatisticsServlet extends BaseServlet {
         if (endTime == null && startTime == null) {\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_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
+                + feedids + ") " + subid\r
+                + SQL_STATUS_204 + SQL_GROUP_SUB_ID;\r
 \r
             return sql;\r
         } else if (startTime != null && endTime == null) {\r
@@ -338,10 +321,10 @@ public class StatisticsServlet extends BaseServlet {
             long compareTime = currentTimeInMilli - inputTimeInMilli;\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_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
+                + feedids + ") " + subid\r
                 + SQL_STATUS_204 + " and e.event_time>=" + compareTime + SQL_GROUP_SUB_ID;\r
             return sql;\r
 \r
@@ -354,10 +337,10 @@ public class StatisticsServlet extends BaseServlet {
             long endInMillis = endDate.getTime();\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
+                + 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
@@ -517,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