\r
package org.onap.dmaap.datarouter.provisioning;\r
\r
+import static org.onap.dmaap.datarouter.provisioning.utils.HttpServletUtils.sendResponseError;\r
+\r
import java.io.IOException;\r
import java.sql.Connection;\r
import java.sql.PreparedStatement;\r
import org.onap.dmaap.datarouter.provisioning.utils.DB;\r
import org.onap.dmaap.datarouter.provisioning.utils.LOGJSONObject;\r
\r
-import static org.onap.dmaap.datarouter.provisioning.utils.HttpServletUtils.sendResponseError;\r
\r
/**\r
* This Servlet handles requests to the <Statistics API> and <Statistics consilidated\r
- * resultset>,\r
+ * resultset>.\r
*\r
* @author Manish Singh\r
* @version $Id: StatisticsServlet.java,v 1.11 2016/08/10 17:27:02 Manish Exp $\r
*/\r
@SuppressWarnings("serial")\r
\r
+\r
public class StatisticsServlet extends BaseServlet {\r
\r
private static final long TWENTYFOUR_HOURS = (24 * 60 * 60 * 1000L);\r
public void doGet(HttpServletRequest req, HttpServletResponse resp) {\r
Map<String, String> map = buildMapFromRequest(req);\r
if (map.get("err") != null) {\r
- sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, "Invalid arguments: " + map.get("err"), eventlogger);\r
+ sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST,\r
+ "Invalid arguments: " + map.get("err"), eventlogger);\r
return;\r
}\r
// check Accept: header??\r
\r
\r
/**\r
- * rsToJson - Converting RS to JSON object\r
+ * rsToJson - Converting RS to JSON object.\r
*\r
- * @param out ServletOutputStream, rs as ResultSet\r
- * @throws IOException, SQLException\r
+ * @param out ServletOutputStream\r
+ * @param rs as ResultSet\r
+ * @throws IOException input/output exception\r
+ * @throws SQLException SQL exception\r
*/\r
public void rsToCSV(ResultSet rs, ServletOutputStream out) throws IOException, SQLException {\r
String header = "FEEDNAME,FEEDID,FILES_PUBLISHED,PUBLISH_LENGTH, FILES_DELIVERED, "\r
}\r
\r
/**\r
- * rsToJson - Converting RS to JSON object\r
+ * rsToJson - Converting RS to JSON object.\r
*\r
- * @param out ServletOutputStream, rs as ResultSet\r
- * @throws IOException, SQLException\r
+ * @param out ServletOutputStream\r
+ * @param rs as ResultSet\r
+ * @throws IOException input/output exception\r
+ * @throws SQLException SQL exception\r
*/\r
private void rsToJson(ResultSet rs, ServletOutputStream out) throws IOException, SQLException {\r
String[] fields = {"FEEDNAME", FEEDID, "FILES_PUBLISHED", "PUBLISH_LENGTH", "FILES_DELIVERED",\r
while (rs.next()) {\r
LOGJSONObject j2 = new LOGJSONObject();\r
for (String key : fields) {\r
- Object v = rs.getString(key);\r
- if (v != null) {\r
- j2.put(key.toLowerCase(), v);\r
+ Object val = rs.getString(key);\r
+ if (val != null) {\r
+ j2.put(key.toLowerCase(), val);\r
} else {\r
j2.put(key.toLowerCase(), "");\r
}\r
\r
\r
/**\r
- * queryGeneretor - Generating sql query\r
+ * queryGeneretor - Generating sql query.\r
*\r
* @param map as key value pare of all user input fields\r
*/\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, (SELECT COUNT(*) FROM LOG_RECORDS AS c WHERE c.FEEDID in("\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) FROM LOG_RECORDS AS c WHERE c.FEEDID in("\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, sum(m.content_length) as DELIVERED_LENGTH,SUBSTRING_INDEX(e.REQURI,'/',+3) as SUBSCRIBER_URL, e.DELIVERY_SUBID as SUBID, e.EVENT_TIME AS PUBLISH_TIME, m.EVENT_TIME AS DELIVERY_TIME, AVG(e.EVENT_TIME - m.EVENT_TIME)/1000 as AverageDelay FROM LOG_RECORDS e JOIN LOG_RECORDS m ON m.PUBLISH_ID = e.PUBLISH_ID AND e.FEEDID IN ("\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
\r
return sql;\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, (SELECT COUNT(*) FROM LOG_RECORDS AS c WHERE c.FEEDID in("\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) FROM LOG_RECORDS AS c WHERE c.FEEDID in("\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, sum(m.content_length) as DELIVERED_LENGTH,SUBSTRING_INDEX(e.REQURI,'/',+3) as SUBSCRIBER_URL, e.DELIVERY_SUBID as SUBID, e.EVENT_TIME AS PUBLISH_TIME, m.EVENT_TIME AS DELIVERY_TIME, AVG(e.EVENT_TIME - m.EVENT_TIME)/1000 as AverageDelay FROM LOG_RECORDS e JOIN LOG_RECORDS m ON m.PUBLISH_ID = e.PUBLISH_ID AND e.FEEDID IN ("\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
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, (SELECT COUNT(*) FROM LOG_RECORDS AS c WHERE c.FEEDID in("\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) FROM LOG_RECORDS AS c WHERE c.FEEDID in("\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, sum(m.content_length) as DELIVERED_LENGTH,SUBSTRING_INDEX(e.REQURI,'/',+3) as SUBSCRIBER_URL, e.DELIVERY_SUBID as SUBID, e.EVENT_TIME AS PUBLISH_TIME, m.EVENT_TIME AS DELIVERY_TIME, AVG(e.EVENT_TIME - m.EVENT_TIME)/1000 as AverageDelay 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 between " + startInMillis\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
\r
\r
private Map<String, String> buildMapFromRequest(HttpServletRequest req) {\r
Map<String, String> map = new HashMap<>();\r
- String s = req.getParameter("type");\r
- if (s != null) {\r
- if ("pub".equals(s) || "del".equals(s) || "exp".equals(s)) {\r
- map.put("type", s);\r
+ String str = req.getParameter("type");\r
+ if (str != null) {\r
+ if ("pub".equals(str) || "del".equals(str) || "exp".equals(str)) {\r
+ map.put("type", str);\r
} else {\r
map.put("err", "bad type");\r
return map;\r
map.put("resultSQL", "");\r
map.put(REASON_SQL, "");\r
\r
- s = req.getParameter("publishId");\r
- if (s != null) {\r
- if (s.indexOf("'") >= 0) {\r
+ str = req.getParameter("publishId");\r
+ if (str != null) {\r
+ if (str.indexOf("'") >= 0) {\r
map.put("err", "bad publishId");\r
return map;\r
}\r
- map.put("publishSQL", " AND PUBLISH_ID = '" + s + "'");\r
+ map.put("publishSQL", " AND PUBLISH_ID = '" + str + "'");\r
}\r
\r
- s = req.getParameter("statusCode");\r
- if (s != null) {\r
+ str = req.getParameter("statusCode");\r
+ if (str != null) {\r
String sql = null;\r
- switch (s) {\r
+ switch (str) {\r
case "success":\r
sql = " AND STATUS >= 200 AND STATUS < 300";\r
break;\r
break;\r
default:\r
try {\r
- int n = Integer.parseInt(s);\r
- if ((n >= 100 && n < 600) || (n == -1)) {\r
- sql = " AND STATUS = " + n;\r
+ int statusCode = Integer.parseInt(str);\r
+ if ((statusCode >= 100 && statusCode < 600) || (statusCode == -1)) {\r
+ sql = " AND STATUS = " + statusCode;\r
}\r
} catch (NumberFormatException e) {\r
eventlogger.error("Failed to parse input", e);\r
map.put("resultSQL", sql.replaceAll("STATUS", "RESULT"));\r
}\r
\r
- s = req.getParameter("expiryReason");\r
- if (s != null) {\r
+ str = req.getParameter("expiryReason");\r
+ if (str != null) {\r
map.put("type", "exp");\r
- switch (s) {\r
+ switch (str) {\r
case "notRetryable":\r
map.put(REASON_SQL, " AND REASON = 'notRetryable'");\r
break;\r
return map;\r
}\r
\r
- private long getTimeFromParam(final String s) {\r
- if (s == null) {\r
+ private long getTimeFromParam(final String str) {\r
+ if (str == null) {\r
return 0;\r
}\r
try {\r
// First, look for an RFC 3339 date\r
- String fmt = (s.indexOf('.') > 0) ? FMT2 : FMT1;\r
+ String fmt = (str.indexOf('.') > 0) ? FMT2 : FMT1;\r
SimpleDateFormat sdf = new SimpleDateFormat(fmt);\r
- Date d = sdf.parse(s);\r
- return d.getTime();\r
+ Date date = sdf.parse(str);\r
+ return date.getTime();\r
} catch (ParseException e) {\r
intlogger.error("Exception in getting Time :- " + e.getMessage(), e);\r
}\r
try {\r
// Also allow a long (in ms); useful for testing\r
- return Long.parseLong(s);\r
+ return Long.parseLong(str);\r
} catch (NumberFormatException e) {\r
intlogger.error("Exception in getting Time :- " + e.getMessage(), e);\r
}\r
- intlogger.info("Error parsing time=" + s);\r
+ intlogger.info("Error parsing time=" + str);\r
return -1;\r
}\r
\r
- private void getRecordsForSQL(Map<String, String> map, String outputType, ServletOutputStream out, HttpServletResponse resp) {\r
+ private void getRecordsForSQL(Map<String, String> map, String outputType, ServletOutputStream out,\r
+ HttpServletResponse resp) {\r
try {\r
String filterQuery = this.queryGeneretor(map);\r
eventlogger.debug("SQL Query for Statistics resultset. " + filterQuery);\r