Remove critical code smells for servlet classes
[dmaap/datarouter.git] / datarouter-prov / src / main / java / org / onap / dmaap / datarouter / provisioning / StatisticsServlet.java
1 /*******************************************************************************\r
2  * ============LICENSE_START==================================================\r
3  * * org.onap.dmaap\r
4  * * ===========================================================================\r
5  * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.\r
6  * * ===========================================================================\r
7  * * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * * you may not use this file except in compliance with the License.\r
9  * * You may obtain a copy of the License at\r
10  * *\r
11  *  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * *\r
13  *  * Unless required by applicable law or agreed to in writing, software\r
14  * * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * * See the License for the specific language governing permissions and\r
17  * * limitations under the License.\r
18  * * ============LICENSE_END====================================================\r
19  * *\r
20  * * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
21  * *\r
22  ******************************************************************************/\r
23 \r
24 package org.onap.dmaap.datarouter.provisioning;\r
25 \r
26 import java.io.IOException;\r
27 import java.sql.Connection;\r
28 import java.sql.PreparedStatement;\r
29 import java.sql.ResultSet;\r
30 import java.sql.SQLException;\r
31 import java.text.ParseException;\r
32 import java.text.SimpleDateFormat;\r
33 import java.util.Calendar;\r
34 import java.util.Date;\r
35 import java.util.HashMap;\r
36 import java.util.Map;\r
37 import java.util.TimeZone;\r
38 import javax.servlet.ServletOutputStream;\r
39 import javax.servlet.http.HttpServletRequest;\r
40 import javax.servlet.http.HttpServletResponse;\r
41 import org.json.JSONException;\r
42 import org.onap.dmaap.datarouter.provisioning.beans.EventLogRecord;\r
43 import org.onap.dmaap.datarouter.provisioning.utils.DB;\r
44 import org.onap.dmaap.datarouter.provisioning.utils.LOGJSONObject;\r
45 \r
46 import static org.onap.dmaap.datarouter.provisioning.utils.HttpServletUtils.sendResponseError;\r
47 \r
48 /**\r
49  * This Servlet handles requests to the <Statistics API> and  <Statistics consilidated\r
50  * resultset>,\r
51  *\r
52  * @author Manish Singh\r
53  * @version $Id: StatisticsServlet.java,v 1.11 2016/08/10 17:27:02 Manish Exp $\r
54  */\r
55 @SuppressWarnings("serial")\r
56 \r
57 public class StatisticsServlet extends BaseServlet {\r
58 \r
59   private static final long TWENTYFOUR_HOURS = (24 * 60 * 60 * 1000L);\r
60   private static final String fmt1 = "yyyy-MM-dd'T'HH:mm:ss'Z'";\r
61   private static final String fmt2 = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";\r
62 \r
63 \r
64   /**\r
65    * DELETE a logging URL -- not supported.\r
66    */\r
67   @Override\r
68   public void doDelete(HttpServletRequest req, HttpServletResponse resp) {\r
69     String message = "DELETE not allowed for the logURL.";\r
70     EventLogRecord elr = new EventLogRecord(req);\r
71     elr.setMessage(message);\r
72     elr.setResult(HttpServletResponse.SC_METHOD_NOT_ALLOWED);\r
73     eventlogger.error(elr.toString());\r
74     sendResponseError(resp, HttpServletResponse.SC_METHOD_NOT_ALLOWED, message, eventlogger);\r
75   }\r
76 \r
77   /**\r
78    * GET a Statistics URL -- retrieve Statistics data for a feed or subscription. See the\r
79    * <b>Statistics API</b> document for details on how this     method should be invoked.\r
80    */\r
81   @Override\r
82   public void doGet(HttpServletRequest req, HttpServletResponse resp) {\r
83 \r
84     Map<String, String> map = buildMapFromRequest(req);\r
85     if (map.get("err") != null) {\r
86       sendResponseError(resp, HttpServletResponse.SC_BAD_REQUEST, "Invalid arguments: " + map.get("err"), eventlogger);\r
87       return;\r
88     }\r
89     // check Accept: header??\r
90 \r
91     resp.setStatus(HttpServletResponse.SC_OK);\r
92     resp.setContentType(LOGLIST_CONTENT_TYPE);\r
93 \r
94     String outputType = "json";\r
95     String feedids = null;\r
96 \r
97     if (req.getParameter("feedid") == null && req.getParameter("groupid") == null) {\r
98       try {\r
99         resp.getOutputStream().print("Invalid request, Feedid or Group ID is required.");\r
100       } catch (IOException ioe) {\r
101         eventlogger.error("PROV0171 StatisticsServlet.doGet: " + ioe.getMessage(), ioe);\r
102       }\r
103     }\r
104 \r
105     if (req.getParameter("feedid") != null && req.getParameter("groupid") == null) {\r
106       map.put("feedids", req.getParameter("feedid").replace("|", ",").toString());\r
107     }\r
108 \r
109     if (req.getParameter("groupid") != null && req.getParameter("feedid") == null) {\r
110       StringBuffer groupid1 = new StringBuffer();\r
111 \r
112       try {\r
113         groupid1 = this.getFeedIdsByGroupId(Integer.parseInt(req.getParameter("groupid")));\r
114         map.put("feedids", groupid1.toString());\r
115       } catch (NumberFormatException | SQLException e) {\r
116         eventlogger.error("PROV0172 StatisticsServlet.doGet: " + e.getMessage(), e);\r
117       }\r
118     }\r
119     if (req.getParameter("groupid") != null && req.getParameter("feedid") != null) {\r
120       StringBuffer groupid1 = new StringBuffer();\r
121 \r
122       try {\r
123         groupid1 = this.getFeedIdsByGroupId(Integer.parseInt(req.getParameter("groupid")));\r
124         groupid1.append(",");\r
125         groupid1.append(req.getParameter("feedid").replace("|", ",").toString());\r
126         map.put("feedids", groupid1.toString());\r
127       } catch (NumberFormatException | SQLException e) {\r
128         eventlogger.error("PROV0173 StatisticsServlet.doGet: " + e.getMessage(), e);\r
129       }\r
130     }\r
131 \r
132     if (req.getParameter("subid") != null && req.getParameter("feedid") != null) {\r
133       StringBuffer subidstr = new StringBuffer();\r
134       subidstr.append("and e.DELIVERY_SUBID in(");\r
135 \r
136       subidstr.append(req.getParameter("subid").replace("|", ",").toString());\r
137       subidstr.append(")");\r
138       map.put("subid", subidstr.toString());\r
139     }\r
140     if (req.getParameter("subid") != null && req.getParameter("groupid") != null) {\r
141       StringBuffer subidstr = new StringBuffer();\r
142       subidstr.append("and e.DELIVERY_SUBID in(");\r
143 \r
144       subidstr.append(req.getParameter("subid").replace("|", ",").toString());\r
145       subidstr.append(")");\r
146       map.put("subid", subidstr.toString());\r
147     }\r
148     if (req.getParameter("type") != null) {\r
149       map.put("eventType", req.getParameter("type").replace("|", ",").toString());\r
150     }\r
151     if (req.getParameter("output_type") != null) {\r
152       map.put("output_type", req.getParameter("output_type").toString());\r
153     }\r
154     if (req.getParameter("start_time") != null) {\r
155       map.put("start_time", req.getParameter("start_time").toString());\r
156     }\r
157     if (req.getParameter("end_time") != null) {\r
158       map.put("end_time", req.getParameter("end_time").toString());\r
159     }\r
160 \r
161     if (req.getParameter("time") != null) {\r
162       map.put("start_time", req.getParameter("time").toString());\r
163       map.put("end_time", null);\r
164     }\r
165 \r
166     if (req.getParameter("output_type") != null) {\r
167       outputType = req.getParameter("output_type");\r
168     }\r
169     try {\r
170       this.getRecordsForSQL(map, outputType, resp.getOutputStream(), resp);\r
171     } catch (IOException ioe) {\r
172       eventlogger.error("PROV0174 StatisticsServlet.doGet: " +  ioe.getMessage(), ioe);\r
173     }\r
174 \r
175   }\r
176 \r
177 \r
178   /**\r
179    * rsToJson - Converting RS to JSON object\r
180    *\r
181    * @param out ServletOutputStream, rs as ResultSet\r
182    * @throws IOException, SQLException\r
183    */\r
184   public void rsToCSV(ResultSet rs, ServletOutputStream out) throws IOException, SQLException {\r
185     String header = "FEEDNAME,FEEDID,FILES_PUBLISHED,PUBLISH_LENGTH, FILES_DELIVERED, DELIVERED_LENGTH, SUBSCRIBER_URL, SUBID, PUBLISH_TIME,DELIVERY_TIME, AverageDelay\n";\r
186 \r
187     out.write(header.getBytes());\r
188 \r
189     while (rs.next()) {\r
190       StringBuffer line = new StringBuffer();\r
191       line.append(rs.getString("FEEDNAME"));\r
192       line.append(",");\r
193       line.append(rs.getString("FEEDID"));\r
194       line.append(",");\r
195       line.append(rs.getString("FILES_PUBLISHED"));\r
196       line.append(",");\r
197       line.append(rs.getString("PUBLISH_LENGTH"));\r
198       line.append(",");\r
199       line.append(rs.getString("FILES_DELIVERED"));\r
200       line.append(",");\r
201       line.append(rs.getString("DELIVERED_LENGTH"));\r
202       line.append(",");\r
203       line.append(rs.getString("SUBSCRIBER_URL"));\r
204       line.append(",");\r
205       line.append(rs.getString("SUBID"));\r
206       line.append(",");\r
207       line.append(rs.getString("PUBLISH_TIME"));\r
208       line.append(",");\r
209       line.append(rs.getString("DELIVERY_TIME"));\r
210       line.append(",");\r
211       line.append(rs.getString("AverageDelay"));\r
212       line.append(",");\r
213 \r
214       line.append("\n");\r
215       out.write(line.toString().getBytes());\r
216       out.flush();\r
217     }\r
218   }\r
219 \r
220   /**\r
221    * rsToJson - Converting RS to JSON object\r
222    *\r
223    * @param out ServletOutputStream, rs as ResultSet\r
224    * @throws IOException, SQLException\r
225    */\r
226   public void rsToJson(ResultSet rs, ServletOutputStream out) throws IOException, SQLException {\r
227 \r
228     String fields[] = {"FEEDNAME", "FEEDID", "FILES_PUBLISHED", "PUBLISH_LENGTH", "FILES_DELIVERED",\r
229         "DELIVERED_LENGTH", "SUBSCRIBER_URL", "SUBID", "PUBLISH_TIME", "DELIVERY_TIME",\r
230         "AverageDelay"};\r
231     StringBuffer line = new StringBuffer();\r
232 \r
233     line.append("[\n");\r
234 \r
235     while (rs.next()) {\r
236       LOGJSONObject j2 = new LOGJSONObject();\r
237       for (String key : fields) {\r
238         Object v = rs.getString(key);\r
239         if (v != null) {\r
240           j2.put(key.toLowerCase(), v);\r
241         } else {\r
242           j2.put(key.toLowerCase(), "");\r
243         }\r
244       }\r
245       line = line.append(j2.toString());\r
246       line.append(",\n");\r
247     }\r
248     line.append("]");\r
249     out.print(line.toString());\r
250   }\r
251 \r
252   /**\r
253    * getFeedIdsByGroupId - Getting FEEDID's by GROUP ID.\r
254    *\r
255    * @throws SQLException Query SQLException.\r
256    */\r
257   public StringBuffer getFeedIdsByGroupId(int groupIds) throws SQLException {\r
258 \r
259     DB db = null;\r
260     Connection conn = null;\r
261     //PreparedStatement prepareStatement = null;\r
262     ResultSet resultSet = null;\r
263     String sqlGoupid = null;\r
264     StringBuffer feedIds = new StringBuffer();\r
265 \r
266     try {\r
267       db = new DB();\r
268       conn = db.getConnection();\r
269       sqlGoupid = " SELECT FEEDID from FEEDS  WHERE GROUPID = ?";\r
270       try(PreparedStatement prepareStatement = conn.prepareStatement(sqlGoupid)) {\r
271           prepareStatement.setInt(1, groupIds);\r
272           resultSet = prepareStatement.executeQuery();\r
273           while (resultSet.next()) {\r
274               feedIds.append(resultSet.getInt("FEEDID"));\r
275               feedIds.append(",");\r
276           }\r
277           feedIds.deleteCharAt(feedIds.length() - 1);\r
278           System.out.println("feedIds" + feedIds.toString());\r
279       }\r
280     } catch (SQLException e) {\r
281       eventlogger.error("PROV0175 StatisticsServlet.getFeedIdsByGroupId: " + e.getMessage(), e);\r
282     } finally {\r
283       try {\r
284         if (resultSet != null) {\r
285           resultSet.close();\r
286           resultSet = null;\r
287         }\r
288           if (conn != null) {\r
289           db.release(conn);\r
290         }\r
291       } catch (Exception e) {\r
292         eventlogger.error("PROV0176 StatisticsServlet.getFeedIdsByGroupId: " + e.getMessage(), e);\r
293       }\r
294     }\r
295     return feedIds;\r
296   }\r
297 \r
298 \r
299   /**\r
300    * queryGeneretor - Generating sql query\r
301    *\r
302    * @param map as key value pare of all user input fields\r
303    */\r
304   public String queryGeneretor(Map<String, String> map) throws ParseException {\r
305 \r
306     String sql = null;\r
307     String eventType = null;\r
308     String feedids = null;\r
309     String start_time = null;\r
310     String end_time = null;\r
311     String subid = " ";\r
312     if (map.get("eventType") != null) {\r
313       eventType = (String) map.get("eventType");\r
314     }\r
315     if (map.get("feedids") != null) {\r
316       feedids = (String) map.get("feedids");\r
317     }\r
318     if (map.get("start_time") != null) {\r
319       start_time = (String) map.get("start_time");\r
320     }\r
321     if (map.get("end_time") != null) {\r
322       end_time = (String) map.get("end_time");\r
323     }\r
324     if ("all".equalsIgnoreCase(eventType)) {\r
325       eventType = "PUB','DEL, EXP, PBF";\r
326     }\r
327     if (map.get("subid") != null) {\r
328       subid = (String) map.get("subid");\r
329     }\r
330 \r
331     eventlogger.info("Generating sql query to get Statistics resultset. ");\r
332 \r
333     if (end_time == null && start_time == null) {\r
334 \r
335       sql = "SELECT (SELECT NAME FROM FEEDS AS f WHERE f.FEEDID in(" + feedids\r
336           + ") and f.FEEDID=e.FEEDID) AS FEEDNAME, e.FEEDID as FEEDID, (SELECT COUNT(*) FROM LOG_RECORDS AS c WHERE c.FEEDID in("\r
337           + feedids\r
338           + ") 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
339           + feedids\r
340           + ")  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
341           + feedids + ") " + subid + " AND m.STATUS=204 AND e.RESULT=204  group by SUBID";\r
342 \r
343       return sql;\r
344     } else if (start_time != null && end_time == null) {\r
345 \r
346       long inputTimeInMilli = 60000 * Long.parseLong(start_time);\r
347       Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));\r
348       long currentTimeInMilli = cal.getTimeInMillis();\r
349       long compareTime = currentTimeInMilli - inputTimeInMilli;\r
350 \r
351       sql = "SELECT (SELECT NAME FROM FEEDS AS f WHERE f.FEEDID in(" + feedids\r
352           + ") and f.FEEDID=e.FEEDID) AS FEEDNAME, e.FEEDID as FEEDID, (SELECT COUNT(*) FROM LOG_RECORDS AS c WHERE c.FEEDID in("\r
353           + feedids\r
354           + ") 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
355           + feedids\r
356           + ")  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
357           + feedids + ") " + subid + " AND m.STATUS=204 AND e.RESULT=204 and e.event_time>="\r
358           + compareTime + " group by SUBID";\r
359 \r
360       return sql;\r
361 \r
362     } else {\r
363       SimpleDateFormat inFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");\r
364       Date startDate = inFormat.parse(start_time);\r
365       Date endDate = inFormat.parse(end_time);\r
366 \r
367       long startInMillis = startDate.getTime();\r
368       long endInMillis = endDate.getTime();\r
369 \r
370       {\r
371 \r
372         sql = "SELECT (SELECT NAME FROM FEEDS AS f WHERE f.FEEDID in(" + feedids\r
373             + ") and f.FEEDID=e.FEEDID) AS FEEDNAME, e.FEEDID as FEEDID, (SELECT COUNT(*) FROM LOG_RECORDS AS c WHERE c.FEEDID in("\r
374             + feedids\r
375             + ") 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
376             + feedids\r
377             + ")  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
378             + feedids + ") " + subid\r
379             + " AND m.STATUS=204 AND e.RESULT=204 and e.event_time between " + startInMillis\r
380             + " and " + endInMillis + " group by SUBID";\r
381 \r
382       }\r
383       return sql;\r
384     }\r
385   }\r
386 \r
387 \r
388   /**\r
389    * PUT a Statistics URL -- not supported.\r
390    */\r
391   @Override\r
392   public void doPut(HttpServletRequest req, HttpServletResponse resp) {\r
393     String message = "PUT not allowed for the StatisticsURL.";\r
394     EventLogRecord elr = new EventLogRecord(req);\r
395     elr.setMessage(message);\r
396     elr.setResult(HttpServletResponse.SC_METHOD_NOT_ALLOWED);\r
397     eventlogger.error(elr.toString());\r
398     sendResponseError(resp, HttpServletResponse.SC_METHOD_NOT_ALLOWED, message, eventlogger);\r
399   }\r
400 \r
401   /**\r
402    * POST a Statistics URL -- not supported.\r
403    */\r
404   @Override\r
405   public void doPost(HttpServletRequest req, HttpServletResponse resp) {\r
406     String message = "POST not allowed for the StatisticsURL.";\r
407     EventLogRecord elr = new EventLogRecord(req);\r
408     elr.setMessage(message);\r
409     elr.setResult(HttpServletResponse.SC_METHOD_NOT_ALLOWED);\r
410     eventlogger.error(elr.toString());\r
411     sendResponseError(resp, HttpServletResponse.SC_METHOD_NOT_ALLOWED, message, eventlogger);\r
412   }\r
413 \r
414   private Map<String, String> buildMapFromRequest(HttpServletRequest req) {\r
415     Map<String, String> map = new HashMap<String, String>();\r
416     String s = req.getParameter("type");\r
417     if (s != null) {\r
418       if (s.equals("pub") || s.equals("del") || s.equals("exp")) {\r
419         map.put("type", s);\r
420       } else {\r
421         map.put("err", "bad type");\r
422         return map;\r
423       }\r
424     } else {\r
425       map.put("type", "all");\r
426     }\r
427     map.put("publishSQL", "");\r
428     map.put("statusSQL", "");\r
429     map.put("resultSQL", "");\r
430     map.put("reasonSQL", "");\r
431 \r
432     s = req.getParameter("publishId");\r
433     if (s != null) {\r
434       if (s.indexOf("'") >= 0) {\r
435         map.put("err", "bad publishId");\r
436         return map;\r
437       }\r
438       map.put("publishSQL", " AND PUBLISH_ID = '" + s + "'");\r
439     }\r
440 \r
441     s = req.getParameter("statusCode");\r
442     if (s != null) {\r
443       String sql = null;\r
444       if (s.equals("success")) {\r
445         sql = " AND STATUS >= 200 AND STATUS < 300";\r
446       } else if (s.equals("redirect")) {\r
447         sql = " AND STATUS >= 300 AND STATUS < 400";\r
448       } else if (s.equals("failure")) {\r
449         sql = " AND STATUS >= 400";\r
450       } else {\r
451         try {\r
452           Integer n = Integer.parseInt(s);\r
453           if ((n >= 100 && n < 600) || (n == -1)) {\r
454             sql = " AND STATUS = " + n;\r
455           }\r
456         } catch (NumberFormatException e) {\r
457         }\r
458       }\r
459       if (sql == null) {\r
460         map.put("err", "bad statusCode");\r
461         return map;\r
462       }\r
463       map.put("statusSQL", sql);\r
464       map.put("resultSQL", sql.replaceAll("STATUS", "RESULT"));\r
465     }\r
466 \r
467     s = req.getParameter("expiryReason");\r
468     if (s != null) {\r
469       map.put("type", "exp");\r
470       if (s.equals("notRetryable")) {\r
471         map.put("reasonSQL", " AND REASON = 'notRetryable'");\r
472       } else if (s.equals("retriesExhausted")) {\r
473         map.put("reasonSQL", " AND REASON = 'retriesExhausted'");\r
474       } else if (s.equals("diskFull")) {\r
475         map.put("reasonSQL", " AND REASON = 'diskFull'");\r
476       } else if (s.equals("other")) {\r
477         map.put("reasonSQL", " AND REASON = 'other'");\r
478       } else {\r
479         map.put("err", "bad expiryReason");\r
480         return map;\r
481       }\r
482     }\r
483 \r
484     long stime = getTimeFromParam(req.getParameter("start"));\r
485     if (stime < 0) {\r
486       map.put("err", "bad start");\r
487       return map;\r
488     }\r
489     long etime = getTimeFromParam(req.getParameter("end"));\r
490     if (etime < 0) {\r
491       map.put("err", "bad end");\r
492       return map;\r
493     }\r
494     if (stime == 0 && etime == 0) {\r
495       etime = System.currentTimeMillis();\r
496       stime = etime - TWENTYFOUR_HOURS;\r
497     } else if (stime == 0) {\r
498       stime = etime - TWENTYFOUR_HOURS;\r
499     } else if (etime == 0) {\r
500       etime = stime + TWENTYFOUR_HOURS;\r
501     }\r
502     map.put("timeSQL", String.format(" AND EVENT_TIME >= %d AND EVENT_TIME <= %d", stime, etime));\r
503     return map;\r
504   }\r
505 \r
506   private long getTimeFromParam(final String s) {\r
507     if (s == null) {\r
508       return 0;\r
509     }\r
510     try {\r
511       // First, look for an RFC 3339 date\r
512       String fmt = (s.indexOf('.') > 0) ? fmt2 : fmt1;\r
513       SimpleDateFormat sdf = new SimpleDateFormat(fmt);\r
514       Date d = sdf.parse(s);\r
515       return d.getTime();\r
516     } catch (ParseException e) {\r
517     }\r
518     try {\r
519       // Also allow a long (in ms); useful for testing\r
520       long n = Long.parseLong(s);\r
521       return n;\r
522     } catch (NumberFormatException e) {\r
523     }\r
524     intlogger.info("Error parsing time=" + s);\r
525     return -1;\r
526   }\r
527 \r
528   private void getRecordsForSQL(Map<String, String> map, String outputType, ServletOutputStream out, HttpServletResponse resp) {\r
529     try {\r
530 \r
531       String filterQuery = this.queryGeneretor(map);\r
532       eventlogger.debug("SQL Query for Statistics resultset. " + filterQuery);\r
533       intlogger.debug(filterQuery);\r
534       long start = System.currentTimeMillis();\r
535       DB db = new DB();\r
536       try (Connection conn = db.getConnection()) {\r
537         try (ResultSet rs = conn.prepareStatement(filterQuery).executeQuery()) {\r
538           if (outputType.equals("csv")) {\r
539             resp.setContentType("application/octet-stream");\r
540             Date date = new Date();\r
541             SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-YYYY HH:mm:ss");\r
542             resp.setHeader("Content-Disposition",\r
543                     "attachment; filename=\"result:" + dateFormat.format(date) + ".csv\"");\r
544             eventlogger.info("Generating CSV file from Statistics resultset");\r
545 \r
546             rsToCSV(rs, out);\r
547           } else {\r
548             eventlogger.info("Generating JSON for Statistics resultset");\r
549             this.rsToJson(rs, out);\r
550           }\r
551         }\r
552       } catch (SQLException e) {\r
553         eventlogger.error("SQLException:" + e);\r
554       }\r
555       intlogger.debug("Time: " + (System.currentTimeMillis() - start) + " ms");\r
556     } catch (IOException e) {\r
557       eventlogger.error("IOException - Generating JSON/CSV:" + e);\r
558     } catch (JSONException e) {\r
559       eventlogger.error("JSONException - executing SQL query:" + e);\r
560     } catch (ParseException e) {\r
561       eventlogger.error("ParseException - executing SQL query:" + e);\r
562     }\r
563   }\r
564 }\r
565 \r