[DMAAP-DR] Remove AAF/TLS phase 1
[dmaap/datarouter.git] / datarouter-prov / src / main / java / org / onap / dmaap / datarouter / provisioning / StatisticsServlet.java
index 7163a63..1c324e5 100755 (executable)
@@ -25,6 +25,7 @@ package org.onap.dmaap.datarouter.provisioning;
 \r
 import static org.onap.dmaap.datarouter.provisioning.utils.HttpServletUtils.sendResponseError;\r
 \r
+import jakarta.servlet.ServletOutputStream;\r
 import java.io.IOException;\r
 import java.sql.Connection;\r
 import java.sql.PreparedStatement;\r
@@ -39,9 +40,8 @@ import java.util.Date;
 import java.util.HashMap;\r
 import java.util.Map;\r
 import java.util.TimeZone;\r
-import javax.servlet.ServletOutputStream;\r
-import javax.servlet.http.HttpServletRequest;\r
-import javax.servlet.http.HttpServletResponse;\r
+import jakarta.servlet.http.HttpServletRequest;\r
+import jakarta.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.LOGJSONObject;\r
@@ -64,6 +64,7 @@ public class StatisticsServlet extends BaseServlet {
     private static final String FMT1 = "yyyy-MM-dd'T'HH:mm:ss'Z'";\r
     private static final String FMT2 = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";\r
     public static final String FEEDID = "FEEDID";\r
+    public static final String START = "start";\r
 \r
     //sql Strings\r
     private static final String SQL_SELECT_NAME = "SELECT (SELECT NAME FROM FEEDS AS f WHERE f.FEEDID in(";\r
@@ -155,22 +156,43 @@ public class StatisticsServlet extends BaseServlet {
         if (req.getParameter("type") != null) {\r
             map.put(EVENT_TYPE, req.getParameter("type").replace("|", ","));\r
         }\r
-        if (req.getParameter(OUTPUT_TYPE) != null && req.getParameter(OUTPUT_TYPE).equals(CSV_OUTPUT_TYPE)) {\r
-            map.put(OUTPUT_TYPE, CSV_OUTPUT_TYPE);\r
-            outputType = CSV_OUTPUT_TYPE;\r
+        if (req.getParameter(OUTPUT_TYPE) != null) {\r
+            map.put(OUTPUT_TYPE, req.getParameter(OUTPUT_TYPE));\r
+            outputType = req.getParameter(OUTPUT_TYPE);\r
         }\r
         if (req.getParameter(OUTPUT_TYPE) != null && req.getParameter(OUTPUT_TYPE).equals(JSON_OUTPUT_TYPE)) {\r
             map.put(OUTPUT_TYPE, JSON_OUTPUT_TYPE);\r
         }\r
         if (req.getParameter(START_TIME) != null) {\r
-            map.put(START_TIME, req.getParameter(START_TIME));\r
+            String startTime = req.getParameter(START_TIME);\r
+            try {\r
+                Long.parseLong(startTime);\r
+                map.put(START_TIME, startTime);\r
+            }\r
+            catch (NumberFormatException e) {\r
+                eventlogger.error("Invalid start time StatisticsServlet.doGet: " +  e.getMessage(), e);\r
+            }\r
         }\r
         if (req.getParameter(END_TIME) != null) {\r
-            map.put(END_TIME, req.getParameter(END_TIME));\r
+            String endTime = req.getParameter(END_TIME);\r
+            try {\r
+                Long.parseLong(endTime);\r
+                map.put(END_TIME, endTime);\r
+            }\r
+            catch (NumberFormatException e) {\r
+                eventlogger.error("Invalid end time StatisticsServlet.doGet: " +  e.getMessage(), e);\r
+            }\r
         }\r
         if (req.getParameter("time") != null) {\r
-            map.put(START_TIME, req.getParameter("time"));\r
-            map.put(END_TIME, null);\r
+            String time = req.getParameter("time");\r
+            try {\r
+                Long.parseLong(time);\r
+                map.put(START_TIME, time);\r
+                map.put(END_TIME, null);\r
+            }\r
+            catch (NumberFormatException e) {\r
+                eventlogger.error("Invalid end time StatisticsServlet.doGet: " +  e.getMessage(), e);\r
+            }\r
         }\r
         try {\r
             this.getRecordsForSQL(map, outputType, resp.getOutputStream(), resp);\r
@@ -180,7 +202,6 @@ public class StatisticsServlet extends BaseServlet {
 \r
     }\r
 \r
-\r
     /**\r
      * rsToJson - Converting RS to JSON object.\r
      *\r
@@ -281,17 +302,23 @@ public class StatisticsServlet extends BaseServlet {
 \r
 \r
     /**\r
-     * queryGeneretor - Generating sql query.\r
+     * getResultSet - Set the result from the query.\r
      *\r
      * @param map as key value pare of all user input fields\r
      */\r
-    private String queryGeneretor(Map<String, String> map) throws ParseException {\r
+    private void getResultSet(Map<String, String> map, String outputType, ServletOutputStream out,\r
+        HttpServletResponse resp) throws ParseException, SQLException, IOException {\r
 \r
         String sql;\r
         String feedids = null;\r
         String startTime = null;\r
         String endTime = null;\r
+        long compareTime = 0;\r
+        long startInMillis = 0;\r
+        long endInMillis = 0;\r
         String subid = " ";\r
+        String compareType;\r
+        ResultSet rs;\r
 \r
         if (map.get(FEEDIDS) != null) {\r
             feedids = map.get(FEEDIDS);\r
@@ -306,48 +333,50 @@ public class StatisticsServlet extends BaseServlet {
             subid = map.get(SUBID);\r
         }\r
 \r
-        eventlogger.info("Generating sql query to get Statistics resultset. ");\r
-\r
         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_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
+            sql =  SQL_SELECT_NAME + "?" + SQL_FEED_ID + SQL_SELECT_COUNT + "?" + SQL_TYPE_PUB + SQL_SELECT_SUM\r
+                + "?" + SQL_PUBLISH_LENGTH + SQL_SUBSCRIBER_URL + SQL_SUB_ID + SQL_DELIVERY_TIME + SQL_AVERAGE_DELAY\r
+                + SQL_JOIN_RECORDS + "?" + ") " + SQL_STATUS_204 + SQL_GROUP_SUB_ID;\r
+            compareType = "default";\r
         } else if (startTime != null && endTime == null) {\r
-\r
             long inputTimeInMilli = 60000 * Long.parseLong(startTime);\r
             Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));\r
             long currentTimeInMilli = cal.getTimeInMillis();\r
-            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_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
+            compareTime = currentTimeInMilli - inputTimeInMilli;\r
+            sql = SQL_SELECT_NAME + "?" + SQL_FEED_ID + SQL_SELECT_COUNT + "?" + SQL_TYPE_PUB + SQL_SELECT_SUM\r
+                + "?" + SQL_PUBLISH_LENGTH + SQL_SUBSCRIBER_URL + SQL_SUB_ID + SQL_DELIVERY_TIME + SQL_AVERAGE_DELAY\r
+                + SQL_JOIN_RECORDS + "?" + ") " + SQL_STATUS_204\r
+                + " and e.event_time>=" + "?" + SQL_GROUP_SUB_ID;\r
+            compareType = START;\r
         } else {\r
             SimpleDateFormat inFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");\r
             Date startDate = inFormat.parse(startTime);\r
             Date endDate = inFormat.parse(endTime);\r
-\r
-            long startInMillis = startDate.getTime();\r
-            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
-\r
-            return sql;\r
+            startInMillis = startDate.getTime();\r
+            endInMillis = endDate.getTime();\r
+            sql = SQL_SELECT_NAME + "?" + SQL_FEED_ID + SQL_SELECT_COUNT + "?" + SQL_TYPE_PUB + SQL_SELECT_SUM\r
+                + "?" + SQL_PUBLISH_LENGTH + SQL_SUBSCRIBER_URL + SQL_SUB_ID + SQL_DELIVERY_TIME + SQL_AVERAGE_DELAY\r
+                + SQL_JOIN_RECORDS + "?" + ") " +  SQL_STATUS_204\r
+                + " and e.event_time between " + "?" + " and " + "?" + SQL_GROUP_SUB_ID;\r
+            compareType = "startAndEnd";\r
+        }\r
+        try (Connection conn = ProvDbUtils.getInstance().getConnection();\r
+            PreparedStatement ps = conn.prepareStatement(sql)) {\r
+            eventlogger.debug("SQL Query for Statistics resultset. " + sql);\r
+            intlogger.debug(sql);\r
+            ps.setString(1, feedids);\r
+            ps.setString(2, feedids);\r
+            ps.setString(3, feedids);\r
+            ps.setString(4, feedids);\r
+            if (compareType.equals(START)) {\r
+                ps.setLong(5, compareTime);\r
+            }\r
+            if (compareType.equals("startAndEnd")) {\r
+                ps.setLong(5, startInMillis);\r
+                ps.setLong(6, endInMillis);\r
+            }\r
+            rs = ps.executeQuery();\r
+            parseResult(outputType, out, resp, rs);\r
         }\r
     }\r
 \r
@@ -434,7 +463,7 @@ public class StatisticsServlet extends BaseServlet {
                 return map;\r
             }\r
             map.put("statusSQL", sql);\r
-            map.put("resultSQL", sql.replaceAll("STATUS", "RESULT"));\r
+            map.put("resultSQL", sql.replace("STATUS", "RESULT"));\r
         }\r
 \r
         str = req.getParameter("expiryReason");\r
@@ -459,7 +488,7 @@ public class StatisticsServlet extends BaseServlet {
             }\r
         }\r
 \r
-        long stime = getTimeFromParam(req.getParameter("start"));\r
+        long stime = getTimeFromParam(req.getParameter(START));\r
         if (stime < 0) {\r
             map.put("err", "bad start");\r
             return map;\r
@@ -506,29 +535,13 @@ public class StatisticsServlet extends BaseServlet {
 \r
     private void getRecordsForSQL(Map<String, String> map, String outputType, ServletOutputStream out,\r
         HttpServletResponse resp) {\r
+        eventlogger.info("Generating sql query to get Statistics resultset. ");\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
-            try (Connection conn = ProvDbUtils.getInstance().getConnection();\r
-                PreparedStatement ps = conn.prepareStatement(filterQuery);\r
-                ResultSet rs = ps.executeQuery()) {\r
-                if (CSV_OUTPUT_TYPE.equals(outputType)) {\r
-                    resp.setContentType("application/octet-stream");\r
-                    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");\r
-                    resp.setHeader("Content-Disposition",\r
-                        "attachment; filename=\"result:" + LocalDateTime.now().format(formatter) + ".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
-            } catch (SQLException e) {\r
-                eventlogger.error("SQLException:" + e);\r
-            }\r
+            this.getResultSet(map, outputType, out, resp);\r
             intlogger.debug("Time: " + (System.currentTimeMillis() - start) + " ms");\r
+        } catch (SQLException e) {\r
+            eventlogger.error("SQLException:" + e.getMessage());\r
         } catch (IOException e) {\r
             eventlogger.error("IOException - Generating JSON/CSV:" + e);\r
         } catch (JSONException e) {\r
@@ -537,5 +550,20 @@ public class StatisticsServlet extends BaseServlet {
             eventlogger.error("ParseException - executing SQL query:" + e);\r
         }\r
     }\r
+\r
+    private void parseResult(String outputType, ServletOutputStream out, HttpServletResponse resp,\r
+        ResultSet rs) throws IOException, SQLException {\r
+        if (CSV_OUTPUT_TYPE.equals(outputType)) {\r
+            resp.setContentType("application/octet-stream");\r
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");\r
+            resp.setHeader("Content-Disposition",\r
+                "attachment; filename=\"result:" + LocalDateTime.now().format(formatter) + ".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
+    }\r
 }\r
 \r