1
2
3
4
5
6 package org.miloss.fgsms.services.rs.impl;
7
8 import java.io.File;
9 import java.io.FileOutputStream;
10 import java.io.OutputStreamWriter;
11 import java.sql.Connection;
12 import java.sql.PreparedStatement;
13 import java.sql.ResultSet;
14 import java.util.ArrayList;
15 import java.util.Calendar;
16 import java.util.Date;
17 import java.util.GregorianCalendar;
18 import java.util.List;
19 import java.util.UUID;
20 import javax.servlet.http.HttpServletRequest;
21 import javax.xml.ws.WebServiceContext;
22 import javax.xml.ws.handler.MessageContext;
23 import org.apache.log4j.Level;
24 import org.miloss.fgsms.common.Constants;
25 import org.miloss.fgsms.common.DBUtils;
26 import org.miloss.fgsms.common.UserIdentityUtil;
27 import org.miloss.fgsms.common.Utility;
28 import org.miloss.fgsms.services.interfaces.common.PolicyType;
29 import org.miloss.fgsms.services.interfaces.common.SecurityWrapper;
30 import org.miloss.fgsms.services.interfaces.faults.ServiceUnavailableFaultCodes;
31 import org.miloss.fgsms.services.interfaces.reportingservice.ExportCSVDataRequestMsg;
32 import org.miloss.fgsms.services.interfaces.reportingservice.ExportDataToCSVResponseMsg;
33 import org.miloss.fgsms.services.interfaces.reportingservice.ExportRecordsEnum;
34 import org.miloss.fgsms.services.interfaces.reportingservice.ServiceUnavailableException;
35 import static org.miloss.fgsms.services.rs.impl.Reporting.delimiter;
36 import static org.miloss.fgsms.services.rs.impl.Reporting.getFilePathDelimitor;
37 import static org.miloss.fgsms.services.rs.impl.Reporting.isPolicyTypeOf;
38 import static org.miloss.fgsms.services.rs.impl.Reporting.log;
39 import static org.miloss.fgsms.services.rs.impl.Reporting.name;
40 import static org.miloss.fgsms.services.rs.impl.Reporting.toSafeFileName;
41
42
43
44
45
46 public class CsvExporter {
47
48 static ExportDataToCSVResponseMsg exportDataToCSV(WebServiceContext ctx, String currentUser, SecurityWrapper classlevel, ExportCSVDataRequestMsg request) throws ServiceUnavailableException {
49 ExportDataToCSVResponseMsg res = new ExportDataToCSVResponseMsg();
50 res.setClassification(classlevel);
51
52 String path = "";
53
54 String currentFolder = "";
55 File targetfolder = null;
56 UUID id = UUID.randomUUID();
57 try {
58 currentFolder = System.getProperty("jboss.server.temp.dir");
59 if (currentFolder == null || currentFolder.equals("") || currentFolder.equalsIgnoreCase("null")) {
60 currentFolder = System.getProperty("java.io.tmpdir");
61 }
62
63 path = currentFolder + getFilePathDelimitor() + id.toString();
64 targetfolder = new File(path);
65 boolean mkdir = targetfolder.mkdir();
66 if (!mkdir) {
67 HttpServletRequest session = ((HttpServletRequest) ctx.getMessageContext().get(MessageContext.SERVLET_REQUEST));
68
69 targetfolder = (File) session.getAttribute("javax.servlet.context.tmpdir");
70
71 }
72
73 if (!targetfolder.exists()) {
74 log.log(Level.INFO, name + "exportDataToHTML, unable to create temporary directory " + currentFolder + targetfolder.getAbsolutePath());
75 ServiceUnavailableException f = new ServiceUnavailableException("", null);
76 f.getFaultInfo().setCode(ServiceUnavailableFaultCodes.MISCONFIGURATION);
77 throw f;
78 }
79
80 } catch (Exception e) {
81 log.log(Level.INFO, name + "exportDataToHTML, load props" + e);
82 ServiceUnavailableException f = new ServiceUnavailableException("", null);
83 f.getFaultInfo().setCode(ServiceUnavailableFaultCodes.MISCONFIGURATION);
84 throw f;
85 }
86 List<String> files = new ArrayList<String>();
87
88 generateCSVReport(request, path, files, currentUser, ctx, classlevel);
89
90 res.setZipFile(Reporting.generateZipFileandDelete(files, path));
91 return res;
92 }
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108 private static List<String> urlListAudit(boolean allServices, List<String> requestedurls, String currentUser, SecurityWrapper sec, WebServiceContext ctx) {
109 List<String> urls = new ArrayList<String>();
110 if (allServices) {
111 Connection con = Utility.getConfigurationDBConnection();
112 PreparedStatement cmd = null;
113 ResultSet rs = null;
114 try {
115 if (UserIdentityUtil.hasGlobalAdministratorRole(currentUser, "GenerateReports", (sec), ctx)) {
116 cmd = con.prepareStatement("select URI from servicepolicies;");
117 } else if (UserIdentityUtil.hasGlobalAuditRole(currentUser, "GenerateReports", (sec), ctx)) {
118 cmd = con.prepareStatement("select URI from servicepolicies;");
119 } else {
120 cmd = con.prepareStatement("select ObjectURI as URI from UserPermissions "
121 + "where username=? and "
122 + "AdministerObject=1 or AuditObject=1;");
123 cmd.setString(1, currentUser);
124 }
125 rs = cmd.executeQuery();
126 while (rs.next()) {
127 urls.add(rs.getString("URI"));
128 }
129
130 } catch (Exception ex) {
131 log.log(Level.INFO, name + "GenerateReports", ex);
132 } finally {
133 DBUtils.safeClose(rs);
134 DBUtils.safeClose(cmd);
135 DBUtils.safeClose(con);
136 }
137 } else {
138
139 if (requestedurls != null
140 && requestedurls.size() > 0) {
141 for (int i = 0; i < requestedurls.size(); i++) {
142 urls.add(requestedurls.get(i));
143 UserIdentityUtil.assertReadAccess(urls.get(i), currentUser, "urlListAudit", sec, ctx);
144 }
145 }
146 }
147 return urls;
148 }
149
150 protected static void generateCSVReport(ExportCSVDataRequestMsg request, String filenameandpath, List<String> filelist, String currentuser, WebServiceContext ctx, SecurityWrapper security) {
151
152 if (request == null) {
153 throw new IllegalArgumentException("request");
154 }
155 if (request.getExportType() == null) {
156 throw new IllegalArgumentException("report type");
157 }
158 validateCSVRequest(request);
159
160 if (request.getExportType().value().equalsIgnoreCase(ExportRecordsEnum.AUDIT_LOGS.value())) {
161 UserIdentityUtil.assertGlobalAuditRole(currentuser, "GenerateCSVReport", request.getClassification(), ctx);
162 generateAuditCSVReport(request, filenameandpath, filelist, currentuser, security);
163 return;
164 }
165 if (request.getExportType().value().equalsIgnoreCase(ExportRecordsEnum.ALL.value())
166 && UserIdentityUtil.hasGlobalAuditRole(currentuser, "GenerateCSVReport", security, ctx)) {
167 generateAuditCSVReport(request, filenameandpath, filelist, currentuser, security);
168 }
169
170 List<String> urlstoprocess = urlListAudit(request.isAllServices(), request.getURLs(), currentuser, request.getClassification(), ctx);
171
172 for (int i = 0; i < urlstoprocess.size(); i++) {
173
174 switch (request.getExportType()) {
175 case ALL:
176 generateAvailabilityCSVReport(request, filenameandpath, filelist, currentuser, urlstoprocess.get(i), security);
177 generateStatisticsCSVReport(request, filenameandpath, filelist, currentuser, urlstoprocess.get(i), security);
178 generateTransactionsCSVReport(request, filenameandpath, filelist, currentuser, urlstoprocess.get(i), security);
179 generateMachineCSVReport(request, filenameandpath, filelist, currentuser, urlstoprocess.get(i), security);
180 generateProcessCSVReport(request, filenameandpath, filelist, currentuser, urlstoprocess.get(i), security);
181 break;
182 case AVAILABILITY:
183 generateAvailabilityCSVReport(request, filenameandpath, filelist, currentuser, urlstoprocess.get(i), security);
184 break;
185 case STATISTICS:
186 generateStatisticsCSVReport(request, filenameandpath, filelist, currentuser, urlstoprocess.get(i), security);
187 break;
188 case TRANSACTIONS:
189 generateTransactionsCSVReport(request, filenameandpath, filelist, currentuser, urlstoprocess.get(i), security);
190 break;
191 case MACHINE:
192 generateMachineCSVReport(request, filenameandpath, filelist, currentuser, urlstoprocess.get(i), security);
193 break;
194 case PROCESS:
195 generateProcessCSVReport(request, filenameandpath, filelist, currentuser, urlstoprocess.get(i), security);
196 break;
197 default:
198 throw new IllegalArgumentException();
199 }
200
201 }
202
203 }
204
205 private static void generateTransactionsCSVReport(ExportCSVDataRequestMsg request, String filenameandpath, List<String> filelist, String currentuser, String url, SecurityWrapper security) {
206 if (!Reporting.isPolicyTypeOf(url, PolicyType.TRANSACTIONAL)) {
207 return;
208 }
209 StringBuilder data = new StringBuilder();
210 Connection con = Utility.getPerformanceDBConnection();
211 PreparedStatement com = null;
212 ResultSet rs = null;
213 OutputStreamWriter out = null;
214 try {
215 out = new OutputStreamWriter(
216 new FileOutputStream(filenameandpath + getFilePathDelimitor() + "TransactionExport-" + toSafeFileName(url) + ".csv"),
217 Constants.CHARSET
218 );
219
220 filelist.add(filenameandpath + getFilePathDelimitor() + "TransactionExport-" + Reporting.toSafeFileName(url) + ".csv");
221 data = data.append("%CLASSIFICATION% Generated at %DATETIME_NOW% for %DATETIME_FROM% until %DATETIME_TO% ").append(System.getProperty("line.separator"));
222 data = data.append(url).append(System.getProperty("line.separator"));
223 data = data.append("URI").append(delimiter).append("Response Time (ms)").append(delimiter).append("Recorded at (DCS Host)").append(delimiter).append("Service Hostname").append(delimiter).append("Consumer").append(delimiter).append("Transaction Id").append(delimiter).append("Action").append(delimiter).append("Response size (bytes)").append(delimiter).append("Request size (bytes)").append(delimiter).append("Timestamp (ms since epoch)").append(delimiter).append("Success").append(delimiter).append("SLA Fault").append(delimiter).append("Agent type").append(delimiter).append("Original Request Url").append(delimiter).append("memo/notes from the agent").append(delimiter).append("Related Transaction ID").append(delimiter).append("Thread Id").append(delimiter).append("Request Headers").append(delimiter).append("Response Headers").append(delimiter).append("Request").append(delimiter).append("Response").append(System.getProperty("line.separator"));
224
225 Calendar time = Calendar.getInstance();
226 String t = data.toString();
227 String[] ampm = new String[]{"AM", "PM"};
228 t = t.replaceAll("%DATETIME_NOW%",
229 new Date().toString());
230
231 time = request.getRange().getStart();
232 t = t.replaceAll("%DATETIME_FROM%",
233 time.getTime().toString());
234 time = request.getRange().getEnd();
235 t = t.replaceAll("%DATETIME_TO%",
236 time.getTime().toString());
237
238 if (request.getClassification() == null) {
239 request.setClassification(security);
240 }
241 t = t.replaceAll("%CLASSIFICATION%", (Utility.ICMClassificationToString(request.getClassification().getClassification()) + " Caveat: " + request.getClassification().getCaveats()));
242
243 out.write(t, 0, t.length());
244
245 com = con.prepareStatement(
246 "select * from rawdata "
247 + "where uri=? and utcdatetime > ? and utcdatetime < ? order by utcdatetime desc ;");
248 com.setString(1, url);
249 com.setLong(2, request.getRange().getStart().getTimeInMillis());
250 com.setLong(3, request.getRange().getEnd().getTimeInMillis());
251
252 rs = com.executeQuery();
253 while (rs.next()) {
254 data = new StringBuilder();
255 data = data.append(rs.getString("uri")).append(delimiter).append(rs.getLong("responsetimems")).append(delimiter).append(rs.getString("monitorsource")).append(delimiter).append(rs.getString("hostingsource")).append(delimiter).append(rs.getString("consumeridentity")).append(delimiter).append(rs.getString("transactionid")).append(delimiter).append(rs.getString("soapaction")).append(delimiter).append(rs.getLong("responsesize")).append(delimiter).append(rs.getLong("requestsize")).append(delimiter).append(rs.getLong("utcdatetime")).append(delimiter);
256 data = data.append(rs.getBoolean("success")).append(delimiter);
257 String sla = rs.getString("slafault");
258 if (Utility.stringIsNullOrEmpty(sla)) {
259 data = data.append("false").append(delimiter);
260 } else {
261 data = data.append("true").append(delimiter);
262 }
263 data = data.append(rs.getString("agenttype")).append(delimiter).append(rs.getString("originalurl")).append(delimiter);
264
265 byte[] msg = rs.getBytes("message");
266 if (msg != null && msg.length > 0) {
267 data = data.append(new String(msg, Constants.CHARSET)).append(delimiter);
268 } else {
269 data = data.append(delimiter);
270 }
271 data = data.append(rs.getString("relatedtransactionid")).append(delimiter).append(rs.getString("threadid")).append(delimiter);
272
273 msg = rs.getBytes("requestheaders");
274 if (msg != null && msg.length > 0) {
275 data = data.append(Utility.DE(new String(msg, Constants.CHARSET)).replace('|', ' ')).append(delimiter);
276 } else {
277 data = data.append(delimiter);
278 }
279 msg = rs.getBytes("responseheaders");
280 if (msg != null && msg.length > 0) {
281 data = data.append(Utility.DE(new String(msg, Constants.CHARSET)).replace('|', ' ')).append(delimiter);
282 } else {
283 data = data.append(delimiter);
284 }
285 msg = rs.getBytes("requestxml");
286 if (msg != null && msg.length > 0) {
287 data = data.append(Utility.DE(new String(msg, Constants.CHARSET))).append(delimiter);
288 } else {
289 data = data.append(delimiter);
290 }
291
292 msg = rs.getBytes("responsexml");
293 if (msg != null && msg.length > 0) {
294 data = data.append(Utility.DE(new String(msg, Constants.CHARSET))).append(delimiter);
295 } else {
296 data = data.append(delimiter);
297 }
298 data = data.append(System.getProperty("line.separator"));
299 t = data.toString();
300 out.write(t, 0, t.length());
301
302 }
303
304 } catch (Exception ex) {
305 log.log(Level.ERROR, "", ex);
306 } finally {
307 DBUtils.safeClose(rs);
308 DBUtils.safeClose(com);
309 DBUtils.safeClose(con);
310 if (out != null) {
311 try {
312 out.close();
313 } catch (Exception ex) {
314 }
315 }
316 }
317
318 }
319
320 private static void generateStatisticsCSVReport(ExportCSVDataRequestMsg request, String filenameandpath, List<String> filelist, String currentuser, String url, SecurityWrapper security) {
321 if (!Reporting.isPolicyTypeOf(url, PolicyType.STATISTICAL)) {
322 return;
323 }
324 StringBuilder data = new StringBuilder();
325 Connection con = Utility.getPerformanceDBConnection();
326 PreparedStatement com = null;
327 OutputStreamWriter out = null;
328 ResultSet rs = null;
329 try {
330
331 filelist.add(filenameandpath + getFilePathDelimitor() + "StatisticsExport-" + Reporting.toSafeFileName(url) + ".csv");
332
333 out = new OutputStreamWriter(
334 new FileOutputStream(filenameandpath + getFilePathDelimitor() + "StatisticsExport-" + toSafeFileName(url) + ".csv"),
335 Constants.CHARSET
336 );
337
338 data = data.append("%CLASSIFICATION% Generated at %DATETIME_NOW% for %DATETIME_FROM% until %DATETIME_TO% ").append(System.getProperty("line.separator"));
339 data = data.append(url).append(System.getProperty("line.separator"));
340 data = data.append("Host").append(delimiter).append("Timestamp (ms since epoch)").append(delimiter).append("Name").append(delimiter).append("Consumer Count").append(delimiter).append("Active Consumer Count").append(delimiter).append("Type").append(delimiter).append("Agent Type").append(delimiter).append("Messages Sent").append(delimiter).append("Messages Recieved").append(delimiter).append("Messages Dropped").append(delimiter).append("Bytes Sent").append(delimiter).append("Bytes Recieved").append(delimiter).append("Bytes Dropped").append(delimiter).append("Queue Depth").append(delimiter).append("Canonical Name").append(delimiter).append(System.getProperty("line.separator"));
341
342 Calendar time = Calendar.getInstance();
343
344 String[] ampm = new String[]{"AM", "PM"};
345 String t = data.toString();
346 t = t.replaceAll("%DATETIME_NOW%",
347 time.get(Calendar.YEAR) + "/"
348 + (time.get(Calendar.MONTH) + 1) + "/"
349 + time.get(Calendar.DATE) + " at "
350 + time.get(Calendar.HOUR) + ":"
351 + time.get(Calendar.MINUTE) + ":"
352 + time.get(Calendar.SECOND) + " "
353 + ampm[time.get(Calendar.AM_PM)]);
354 time = request.getRange().getStart();
355 t = t.replaceAll("%DATETIME_FROM%",
356 time.get(Calendar.YEAR) + "/"
357 + (time.get(Calendar.MONTH) + 1) + "/"
358 + time.get(Calendar.DATE) + " "
359 + time.get(Calendar.HOUR) + ":"
360 + time.get(Calendar.MINUTE) + ":"
361 + time.get(Calendar.SECOND) + " "
362 + ampm[time.get(Calendar.AM_PM)]);
363 time = request.getRange().getEnd();
364 t = t.replaceAll("%DATETIME_TO%",
365 time.get(Calendar.YEAR) + "/"
366 + (time.get(Calendar.MONTH) + 1) + "/"
367 + time.get(Calendar.DATE) + " "
368 + time.get(Calendar.HOUR) + ":"
369 + time.get(Calendar.MINUTE) + ":"
370 + time.get(Calendar.SECOND) + " "
371 + ampm[time.get(Calendar.AM_PM)]);
372
373 if (request.getClassification() == null) {
374 request.setClassification(security);
375 }
376 t = t.replaceAll("%CLASSIFICATION%", (Utility.ICMClassificationToString(request.getClassification().getClassification()) + " Caveat: " + request.getClassification().getCaveats()));
377
378 data = new StringBuilder(t);
379
380 data = data.append(System.getProperty("line.separator"));
381 t = data.toString();
382 out.write(t, 0, t.length());
383
384 com = con.prepareStatement(
385 "select * from brokerhistory "
386 + "where host=? and utcdatetime > ? and utcdatetime < ? order by utcdatetime desc ;");
387 com.setString(1, url);
388 com.setLong(2, request.getRange().getStart().getTimeInMillis());
389 com.setLong(3, request.getRange().getEnd().getTimeInMillis());
390
391 rs = com.executeQuery();
392 while (rs.next()) {
393 data = new StringBuilder();
394 data.append(rs.getString("host"));
395 data.append(delimiter);
396 data.append(rs.getLong("utcdatetime"));
397 data.append(delimiter);
398 data.append(rs.getString("namecol"));
399 data.append(delimiter);
400 data.append(rs.getLong("consumercount"));
401 data.append(delimiter);
402 data.append(rs.getLong("activeconsumercount"));
403 data.append(delimiter);
404 data.append(rs.getString("typecol"));
405 data.append(delimiter);
406 data.append(rs.getString("agenttype"));
407 data.append(delimiter);
408 data.append(rs.getLong("messagecount"));
409 data.append(delimiter);
410 data.append(rs.getLong("recievedmessagecount"));
411 data.append(delimiter);
412 data.append(rs.getLong("messagedropcount"));
413 data.append(delimiter);
414 data.append(rs.getLong("bytesout"));
415 data.append(delimiter);
416 data.append(rs.getLong("bytesin"));
417 data.append(delimiter);
418 data.append(rs.getLong("bytesdropcount"));
419 data.append(delimiter);
420 data.append(rs.getLong("queuedepth"));
421 data.append(delimiter);
422 data.append(rs.getString("canonicalname"));
423 data.append(delimiter);
424 data.append(System.getProperty("line.separator"));
425 t = data.toString();
426 out.write(t, 0, t.length());
427
428 }
429
430 } catch (Exception ex) {
431 log.log(Level.ERROR, "", ex);
432 } finally {
433 DBUtils.safeClose(rs);
434 DBUtils.safeClose(com);
435 DBUtils.safeClose(con);
436 if (out != null) {
437 try {
438 out.close();
439 } catch (Exception ex) {
440 }
441 }
442 }
443
444 }
445
446 private static void generateAvailabilityCSVReport(ExportCSVDataRequestMsg request, String filenameandpath,
447 List<String> filelist, String currentuser, String url, SecurityWrapper security) {
448 StringBuilder data = new StringBuilder();
449 Connection con = Utility.getPerformanceDBConnection();
450 PreparedStatement com = null;
451 OutputStreamWriter out = null;
452 ResultSet rs = null;
453 try {
454 filelist.add(filenameandpath + getFilePathDelimitor() + "AvailabilityExport-" + Reporting.toSafeFileName(url) + ".csv");
455 out = new OutputStreamWriter(
456 new FileOutputStream(filenameandpath + getFilePathDelimitor() + "AvailabilityExport-" + toSafeFileName(url) + ".csv"),
457 Constants.CHARSET
458 );
459
460
461
462
463
464 data = data.append("%CLASSIFICATION% Generated at %DATETIME_NOW% for %DATETIME_FROM% until %DATETIME_TO% ").append(System.getProperty("line.separator"));
465 data = data.append(url).append(System.getProperty("line.separator"));
466 data = data.append("URI").append(delimiter).append("Timestamp (ms since epoch)").append(delimiter).append("Record Id").append(delimiter).append("Message").append(delimiter).append("Operational").append(System.getProperty("line.separator"));
467
468 Calendar time = Calendar.getInstance();
469 String t = data.toString();
470 String[] ampm = new String[]{"AM", "PM"};
471 t = t.replaceAll("%DATETIME_NOW%",
472 time.get(Calendar.YEAR) + "/"
473 + (time.get(Calendar.MONTH) + 1) + "/"
474 + time.get(Calendar.DATE) + " at "
475 + time.get(Calendar.HOUR) + ":"
476 + time.get(Calendar.MINUTE) + ":"
477 + time.get(Calendar.SECOND) + " "
478 + ampm[time.get(Calendar.AM_PM)]);
479 time = request.getRange().getStart();
480 t = t.replaceAll("%DATETIME_FROM%",
481 time.get(Calendar.YEAR) + "/"
482 + (time.get(Calendar.MONTH) + 1) + "/"
483 + time.get(Calendar.DATE) + " "
484 + time.get(Calendar.HOUR) + ":"
485 + time.get(Calendar.MINUTE) + ":"
486 + time.get(Calendar.SECOND) + " "
487 + ampm[time.get(Calendar.AM_PM)]);
488 time = request.getRange().getEnd();
489 t = t.replaceAll("%DATETIME_TO%",
490 time.get(Calendar.YEAR) + "/"
491 + (time.get(Calendar.MONTH) + 1) + "/"
492 + time.get(Calendar.DATE) + " "
493 + time.get(Calendar.HOUR) + ":"
494 + time.get(Calendar.MINUTE) + ":"
495 + time.get(Calendar.SECOND) + " "
496 + ampm[time.get(Calendar.AM_PM)]);
497
498 if (request.getClassification() == null) {
499 request.setClassification(security);
500 }
501 t = t.replaceAll("%CLASSIFICATION%", (Utility.ICMClassificationToString(request.getClassification().getClassification()) + " Caveat: " + request.getClassification().getCaveats()));
502
503 t += System.getProperty("line.separator");
504 out.write(t, 0, t.length());
505
506 com = con.prepareStatement(
507 "select * from availability "
508 + "where uri=? and utcdatetime > ? and utcdatetime < ? order by utcdatetime desc ;");
509 com.setString(1, url);
510 com.setLong(2, request.getRange().getStart().getTimeInMillis());
511 com.setLong(3, request.getRange().getEnd().getTimeInMillis());
512
513
514
515
516
517 rs = com.executeQuery();
518 while (rs.next()) {
519 data = new StringBuilder();
520 data.append(rs.getString("uri"));
521 data.append(delimiter);
522 data.append(rs.getLong("utcdatetime"));
523 data.append(delimiter);
524 data.append(rs.getString("id"));
525 data.append(delimiter);
526 data.append(Reporting.stripCommas(rs.getString("message")));
527 data.append(delimiter);
528 data.append(rs.getBoolean("status"));
529 data.append(System.getProperty("line.separator"));
530 t = data.toString();
531 out.write(t, 0, t.length());
532
533 }
534 } catch (Exception ex) {
535 log.log(Level.ERROR, "", ex);
536 } finally {
537 DBUtils.safeClose(rs);
538 DBUtils.safeClose(com);
539 DBUtils.safeClose(con);
540 if (out != null) {
541 try {
542 out.close();
543 } catch (Exception ex) {
544 }
545 }
546 }
547
548 }
549
550 private static void generateAuditCSVReport(ExportCSVDataRequestMsg request,
551 String filenameandpath, List<String> filelist, String currentuser,
552 SecurityWrapper security) {
553 StringBuilder data = new StringBuilder();
554 Connection con = Utility.getConfigurationDBConnection();
555 OutputStreamWriter out = null;
556 PreparedStatement com = null;
557 ResultSet rs = null;
558 try {
559
560
561 filelist.add(filenameandpath + getFilePathDelimitor() + "AuditExport.csv");
562 out = new OutputStreamWriter(
563 new FileOutputStream(filenameandpath + getFilePathDelimitor() + "AuditExport.csv"),
564 Constants.CHARSET
565 );
566
567
568
569
570
571 data = data.append("%CLASSIFICATION% Generated at %DATETIME_NOW% for %DATETIME_FROM% until %DATETIME_TO% ").append(System.getProperty("line.separator"));
572 data = data.append("fgsms Audit Logs").append(System.getProperty("line.separator"));
573 data = data.append("Timestamp (ms since epoch)").append(delimiter).append("Username").append(delimiter).append("Class").append(delimiter).append("Method").append(delimiter).append("Memo").append(delimiter).append("Classification").append(delimiter).append("IP Address").append(System.getProperty("line.separator"));
574
575 Calendar time = Calendar.getInstance();
576 String t = data.toString();
577 String[] ampm = new String[]{"AM", "PM"};
578 t = t.replaceAll("%DATETIME_NOW%",
579 time.get(Calendar.YEAR) + "/"
580 + (time.get(Calendar.MONTH) + 1) + "/"
581 + time.get(Calendar.DATE) + " at "
582 + time.get(Calendar.HOUR) + ":"
583 + time.get(Calendar.MINUTE) + ":"
584 + time.get(Calendar.SECOND) + " "
585 + ampm[time.get(Calendar.AM_PM)]);
586 time = request.getRange().getStart();
587 t = t.replaceAll("%DATETIME_FROM%",
588 time.get(Calendar.YEAR) + "/"
589 + (time.get(Calendar.MONTH) + 1) + "/"
590 + time.get(Calendar.DATE) + " "
591 + time.get(Calendar.HOUR) + ":"
592 + time.get(Calendar.MINUTE) + ":"
593 + time.get(Calendar.SECOND) + " "
594 + ampm[time.get(Calendar.AM_PM)]);
595 time = request.getRange().getEnd();
596 t = t.replaceAll("%DATETIME_TO%",
597 time.get(Calendar.YEAR) + "/"
598 + (time.get(Calendar.MONTH) + 1) + "/"
599 + time.get(Calendar.DATE) + " "
600 + time.get(Calendar.HOUR) + ":"
601 + time.get(Calendar.MINUTE) + ":"
602 + time.get(Calendar.SECOND) + " "
603 + ampm[time.get(Calendar.AM_PM)]);
604
605 if (request.getClassification() == null) {
606 request.setClassification(security);
607 }
608 t = t.replaceAll("%CLASSIFICATION%", (Utility.ICMClassificationToString(request.getClassification().getClassification()) + " Caveat: " + request.getClassification().getCaveats()));
609
610 t += System.getProperty("line.separator");
611 out.write(t, 0, t.length());
612
613 com = con.prepareStatement(
614 "select * from auditlog "
615 + "where utcdatetime > ? and utcdatetime < ? order by utcdatetime desc ;");
616
617 com.setLong(1, request.getRange().getStart().getTimeInMillis());
618 com.setLong(2, request.getRange().getEnd().getTimeInMillis());
619
620
621
622
623
624 rs = com.executeQuery();
625 while (rs.next()) {
626 data = new StringBuilder();
627 data = data.append(rs.getString("utcdatetime")).append(delimiter).
628 append(rs.getString("username")).
629 append(delimiter).append(rs.getString("classname")).
630 append(delimiter).
631 append(rs.getString("method")).
632 append(delimiter).
633 append(new String(rs.getBytes("memo"), Constants.CHARSET)).
634 append(delimiter).append(rs.getString("classification")).
635 append(delimiter).append(rs.getString("ipaddress"));
636 data = data.append(System.getProperty("line.separator"));
637 t = data.toString();
638 out.write(t, 0, t.length());
639
640 }
641 } catch (Exception ex) {
642 log.log(Level.ERROR, "", ex);
643 } finally {
644 DBUtils.safeClose(rs);
645 DBUtils.safeClose(com);
646 DBUtils.safeClose(con);
647 if (out != null) {
648 try {
649 out.close();
650 } catch (Exception ex) {
651 }
652 }
653 }
654
655 }
656
657 private static void generateHardDriveCSVReport(ExportCSVDataRequestMsg request,
658 String filenameandpath, List<String> filelist,
659 String currentuser, String url, SecurityWrapper security) {
660 if (!Reporting.isPolicyTypeOf(url, PolicyType.MACHINE)) {
661 return;
662 }
663 StringBuilder data = new StringBuilder();
664 Connection con = Utility.getConfigurationDBConnection();
665 OutputStreamWriter out = null;
666 PreparedStatement com = null;
667 ResultSet rs = null;
668 try {
669
670
671 filelist.add(filenameandpath + getFilePathDelimitor() + "DiskExport-" + Reporting.toSafeFileName(url) + ".csv");
672 out = new OutputStreamWriter(
673 new FileOutputStream(filenameandpath + getFilePathDelimitor() + "DiskExport-" + toSafeFileName(url) + ".csv"),
674 Constants.CHARSET
675 );
676
677 data = data.append("%CLASSIFICATION% Generated at %DATETIME_NOW% for %DATETIME_FROM% until %DATETIME_TO% ").append(System.getProperty("line.separator"));
678 data = data.append(url).append(System.getProperty("line.separator"));
679 data = data.append("URI").
680 append(delimiter).append("Timestamp (ms since epoch)").
681 append(delimiter).append("Record Id").
682 append(delimiter).append("Free space").
683 append(delimiter).append("Write KB/sec").
684 append(delimiter).append("Read KB/sec").
685 append(delimiter).append("Dev ID").
686 append(delimiter).append("Drive ID").
687 append(delimiter).append("Operational").
688 append(delimiter).append("Status Message").
689 append(System.getProperty("line.separator"));
690
691 Calendar time = Calendar.getInstance();
692 String t = data.toString();
693 String[] ampm = new String[]{"AM", "PM"};
694 t = t.replaceAll("%DATETIME_NOW%",
695 time.get(Calendar.YEAR) + "/"
696 + (time.get(Calendar.MONTH) + 1) + "/"
697 + time.get(Calendar.DATE) + " at "
698 + time.get(Calendar.HOUR) + ":"
699 + time.get(Calendar.MINUTE) + ":"
700 + time.get(Calendar.SECOND) + " "
701 + ampm[time.get(Calendar.AM_PM)]);
702 time = request.getRange().getStart();
703 t = t.replaceAll("%DATETIME_FROM%",
704 time.get(Calendar.YEAR) + "/"
705 + (time.get(Calendar.MONTH) + 1) + "/"
706 + time.get(Calendar.DATE) + " "
707 + time.get(Calendar.HOUR) + ":"
708 + time.get(Calendar.MINUTE) + ":"
709 + time.get(Calendar.SECOND) + " "
710 + ampm[time.get(Calendar.AM_PM)]);
711 time = request.getRange().getEnd();
712 t = t.replaceAll("%DATETIME_TO%",
713 time.get(Calendar.YEAR) + "/"
714 + (time.get(Calendar.MONTH) + 1) + "/"
715 + time.get(Calendar.DATE) + " "
716 + time.get(Calendar.HOUR) + ":"
717 + time.get(Calendar.MINUTE) + ":"
718 + time.get(Calendar.SECOND) + " "
719 + ampm[time.get(Calendar.AM_PM)]);
720
721 if (request.getClassification() == null) {
722 request.setClassification(security);
723 }
724 t = t.replaceAll("%CLASSIFICATION%", (Utility.ICMClassificationToString(request.getClassification().getClassification()) + " Caveat: " + request.getClassification().getCaveats()));
725
726 t += System.getProperty("line.separator");
727 out.write(t, 0, t.length());
728
729 com = con.prepareStatement(
730 "select * from rawdatadrives "
731 + "where uri=? and utcdatetime > ? and utcdatetime < ? order by utcdatetime desc ;");
732 com.setString(1, url);
733 com.setLong(2, request.getRange().getStart().getTimeInMillis());
734 com.setLong(3, request.getRange().getEnd().getTimeInMillis());
735
736
737
738
739
740 rs = com.executeQuery();
741 while (rs.next()) {
742 data = new StringBuilder();
743 data = data.append(rs.getString("uri")).
744 append(delimiter).append(rs.getLong("utcdatetime")).
745 append(delimiter).append(rs.getString("id")).
746 append(delimiter).append(rs.getLong("freespace")).
747 append(delimiter).append(rs.getLong("writeKBs")).
748 append(delimiter).append(rs.getLong("readKBs")).
749 append(delimiter).append(rs.getString("deviceidentifier")).
750 append(delimiter).append(rs.getString("driveidentifier")).
751 append(delimiter).append(rs.getBoolean("status")).
752 append(delimiter).append(rs.getString("statusmsg"));
753
754 data = data.append(System.getProperty("line.separator"));
755 t = data.toString();
756 out.write(t, 0, t.length());
757 }
758
759 } catch (Exception ex) {
760 log.log(Level.WARN, null, ex);
761 } finally {
762 DBUtils.safeClose(rs);
763 DBUtils.safeClose(com);
764 DBUtils.safeClose(con);
765 if (out != null) {
766 try {
767 out.close();
768 } catch (Exception ex) {
769 }
770 }
771 }
772 }
773
774 private static void generateNetworkCSVReport(ExportCSVDataRequestMsg request,
775 String filenameandpath, List<String> filelist,
776 String currentuser, String url, SecurityWrapper security) {
777 if (!Reporting.isPolicyTypeOf(url, PolicyType.MACHINE)) {
778 return;
779 }
780 StringBuilder data = new StringBuilder();
781 Connection con = Utility.getConfigurationDBConnection();
782 OutputStreamWriter out = null;
783 PreparedStatement com = null;
784 ResultSet rs = null;
785 try {
786
787
788 filelist.add(filenameandpath + getFilePathDelimitor() + "NetworkExport-" + Reporting.toSafeFileName(url) + ".csv");
789 out = new OutputStreamWriter(
790 new FileOutputStream(filenameandpath + getFilePathDelimitor() + "NetworkExport-" + toSafeFileName(url) + ".csv"),
791 Constants.CHARSET
792 );
793
794 data = data.append("%CLASSIFICATION% Generated at %DATETIME_NOW% for %DATETIME_FROM% until %DATETIME_TO% ").append(System.getProperty("line.separator"));
795 data = data.append(url).append(System.getProperty("line.separator"));
796 data = data.append("URI").
797 append(delimiter).append("Timestamp (ms since epoch)").
798 append(delimiter).append("Record Id").
799 append(delimiter).append("NIC id").
800 append(delimiter).append("RX KB/sec").
801 append(delimiter).append("TX KB/sec").
802 append(System.getProperty("line.separator"));
803
804 Calendar time = GregorianCalendar.getInstance();
805 String t = data.toString();
806 String[] ampm = new String[]{"AM", "PM"};
807 t = t.replaceAll("%DATETIME_NOW%",
808 time.get(Calendar.YEAR) + "/"
809 + (time.get(Calendar.MONTH) + 1) + "/"
810 + time.get(Calendar.DATE) + " at "
811 + time.get(Calendar.HOUR) + ":"
812 + time.get(Calendar.MINUTE) + ":"
813 + time.get(Calendar.SECOND) + " "
814 + ampm[time.get(Calendar.AM_PM)]);
815 time = request.getRange().getStart();
816 t = t.replaceAll("%DATETIME_FROM%",
817 time.get(Calendar.YEAR) + "/"
818 + (time.get(Calendar.MONTH) + 1) + "/"
819 + time.get(Calendar.DATE) + " "
820 + time.get(Calendar.HOUR) + ":"
821 + time.get(Calendar.MINUTE) + ":"
822 + time.get(Calendar.SECOND) + " "
823 + ampm[time.get(Calendar.AM_PM)]);
824 time = request.getRange().getEnd();
825 t = t.replaceAll("%DATETIME_TO%",
826 time.get(Calendar.YEAR) + "/"
827 + (time.get(Calendar.MONTH) + 1) + "/"
828 + time.get(Calendar.DATE) + " "
829 + time.get(Calendar.HOUR) + ":"
830 + time.get(Calendar.MINUTE) + ":"
831 + time.get(Calendar.SECOND) + " "
832 + ampm[time.get(Calendar.AM_PM)]);
833
834 if (request.getClassification() == null) {
835 request.setClassification(security);
836 }
837 t = t.replaceAll("%CLASSIFICATION%", (Utility.ICMClassificationToString(request.getClassification().getClassification()) + " Caveat: " + request.getClassification().getCaveats()));
838
839 t += System.getProperty("line.separator");
840 out.write(t, 0, t.length());
841
842 com = con.prepareStatement(
843 "select * from rawdatanic "
844 + "where uri=? and utcdatetime > ? and utcdatetime < ? order by utcdatetime desc ;");
845 com.setString(1, url);
846 com.setLong(2, request.getRange().getStart().getTimeInMillis());
847 com.setLong(3, request.getRange().getEnd().getTimeInMillis());
848
849
850
851
852
853 rs = com.executeQuery();
854 while (rs.next()) {
855 data = new StringBuilder();
856 data = data.append(rs.getString("uri")).
857 append(delimiter).append(rs.getLong("utcdatetime")).
858 append(delimiter).append(rs.getString("id")).
859 append(delimiter).append(rs.getString("nicid")).
860 append(delimiter).append(rs.getLong("receiveKBs")).
861 append(delimiter).append(rs.getLong("sendKBs"));
862
863 data = data.append(System.getProperty("line.separator"));
864 t = data.toString();
865 out.write(t, 0, t.length());
866 }
867
868 } catch (Exception ex) {
869 log.log(Level.ERROR, "", ex);
870 } finally {
871 DBUtils.safeClose(rs);
872 DBUtils.safeClose(com);
873 DBUtils.safeClose(con);
874 if (out != null) {
875 try {
876 out.close();
877 } catch (Exception ex) {
878 }
879 }
880 }
881 }
882
883 @SuppressWarnings("fallthrough")
884 private static void validateCSVRequest(ExportCSVDataRequestMsg request) {
885 if (request.getExportType() == null) {
886 throw new IllegalArgumentException("specify an export type");
887 }
888 switch (request.getExportType()) {
889 case AUDIT_LOGS:
890 break;
891 case AVAILABILITY:
892 if (request.isAllServices() == null && request.getURLs().isEmpty()) {
893 throw new IllegalArgumentException("either all services needs to be set, or specify a list of urls from which to export data.");
894 }
895 break;
896 case STATISTICS:
897 if (request.isAllServices() == null && request.getURLs().isEmpty()) {
898 throw new IllegalArgumentException("either all services needs to be set, or specify a list of urls from which to export data.");
899 }
900
901 break;
902 case TRANSACTIONS:
903 if (request.isAllServices() == null && request.getURLs().isEmpty()) {
904 throw new IllegalArgumentException("either all services needs to be set, or specify a list of urls from which to export data.");
905 }
906
907 case MACHINE:
908 case PROCESS:
909 if (request.isAllServices() == null && request.getURLs().isEmpty()) {
910 throw new IllegalArgumentException("either all services needs to be set, or specify a list of urls from which to export data.");
911 }
912 break;
913 }
914
915 }
916
917 private static void generateMachineCSVReport(ExportCSVDataRequestMsg request,
918 String filenameandpath, List<String> filelist, String currentuser,
919 String url, SecurityWrapper security) {
920 if (!isPolicyTypeOf(url, PolicyType.MACHINE)) {
921 return;
922 }
923 StringBuilder data = new StringBuilder();
924 Connection con = Utility.getConfigurationDBConnection();
925 OutputStreamWriter out = null;
926 PreparedStatement com = null;
927 ResultSet rs = null;
928 try {
929
930
931 filelist.add(filenameandpath + getFilePathDelimitor() + "MachineExport-" + toSafeFileName(url) + ".csv");
932 out = new OutputStreamWriter(
933 new FileOutputStream(filenameandpath + getFilePathDelimitor() + "MachineExport-" + toSafeFileName(url) + ".csv"),
934 Constants.CHARSET
935 );
936
937
938
939
940
941 data = data.append("%CLASSIFICATION% Generated at %DATETIME_NOW% for %DATETIME_FROM% until %DATETIME_TO% ").append(System.getProperty("line.separator"));
942 data = data.append(url).append(System.getProperty("line.separator"));
943 data = data.append("URI").
944 append(delimiter).append("Timestamp (ms since epoch)").
945 append(delimiter).append("Record Id").
946 append(delimiter).append("Percent CPU").
947 append(delimiter).append("Memory").
948 append(delimiter).append("Threads").
949 append(delimiter).append("Open Files").
950 append(delimiter).append("Started At").
951 append(System.getProperty("line.separator"));
952
953 Calendar time = Calendar.getInstance();
954 String t = data.toString();
955 String[] ampm = new String[]{"AM", "PM"};
956 t = t.replaceAll("%DATETIME_NOW%",
957 time.get(Calendar.YEAR) + "/"
958 + (time.get(Calendar.MONTH) + 1) + "/"
959 + time.get(Calendar.DATE) + " at "
960 + time.get(Calendar.HOUR) + ":"
961 + time.get(Calendar.MINUTE) + ":"
962 + time.get(Calendar.SECOND) + " "
963 + ampm[time.get(Calendar.AM_PM)]);
964 time = request.getRange().getStart();
965 t = t.replaceAll("%DATETIME_FROM%",
966 time.get(Calendar.YEAR) + "/"
967 + (time.get(Calendar.MONTH) + 1) + "/"
968 + time.get(Calendar.DATE) + " "
969 + time.get(Calendar.HOUR) + ":"
970 + time.get(Calendar.MINUTE) + ":"
971 + time.get(Calendar.SECOND) + " "
972 + ampm[time.get(Calendar.AM_PM)]);
973 time = request.getRange().getEnd();
974 t = t.replaceAll("%DATETIME_TO%",
975 time.get(Calendar.YEAR) + "/"
976 + (time.get(Calendar.MONTH) + 1) + "/"
977 + time.get(Calendar.DATE) + " "
978 + time.get(Calendar.HOUR) + ":"
979 + time.get(Calendar.MINUTE) + ":"
980 + time.get(Calendar.SECOND) + " "
981 + ampm[time.get(Calendar.AM_PM)]);
982
983 if (request.getClassification() == null) {
984 request.setClassification(security);
985 }
986 t = t.replaceAll("%CLASSIFICATION%", (Utility.ICMClassificationToString(request.getClassification().getClassification()) + " Caveat: " + request.getClassification().getCaveats()));
987
988 t += System.getProperty("line.separator");
989 out.write(t, 0, t.length());
990
991 com = con.prepareStatement(
992 "select * from rawdatamachineprocess "
993 + "where uri=? and utcdatetime > ? and utcdatetime < ? order by utcdatetime desc ;");
994 com.setString(1, url);
995 com.setLong(2, request.getRange().getStart().getTimeInMillis());
996 com.setLong(3, request.getRange().getEnd().getTimeInMillis());
997
998
999
1000
1001
1002 rs = com.executeQuery();
1003 while (rs.next()) {
1004 data = new StringBuilder();
1005 data = data.append(rs.getString("uri")).
1006 append(delimiter).append(rs.getLong("utcdatetime")).
1007 append(delimiter).append(rs.getString("id")).
1008 append(delimiter).append(rs.getInt("percentCPU"));
1009 Long l = rs.getLong("memoryused");
1010 if (l != null) {
1011 data = data.append(delimiter).append(l.toString());
1012 }
1013 l = rs.getLong("threads");
1014 if (l != null) {
1015 data = data.append(delimiter).append(l.toString());
1016 }
1017 l = rs.getLong("openfiles");
1018 if (l != null) {
1019 data = data.append(delimiter).append(l.toString());
1020 }
1021 l = rs.getLong("startedat");
1022 if (l != null) {
1023 data = data.append(delimiter).append(l.toString());
1024 }
1025 data = data.append(System.getProperty("line.separator"));
1026 t = data.toString();
1027 out.write(t, 0, t.length());
1028
1029 }
1030 } catch (Exception ex) {
1031 log.log(Level.ERROR, "", ex);
1032 } finally {
1033 DBUtils.safeClose(rs);
1034 DBUtils.safeClose(com);
1035 DBUtils.safeClose(con);
1036 if (out != null) {
1037 try {
1038 out.close();
1039 } catch (Exception ex) {
1040 }
1041 }
1042 }
1043
1044 generateHardDriveCSVReport(request, filenameandpath, filelist, currentuser, url, security);
1045 generateNetworkCSVReport(request, filenameandpath, filelist, currentuser, url, security);
1046 }
1047
1048 private static void generateProcessCSVReport(ExportCSVDataRequestMsg request,
1049 String filenameandpath, List<String> filelist, String currentuser,
1050 String url, SecurityWrapper security) {
1051 if (!isPolicyTypeOf(url, PolicyType.PROCESS)) {
1052 return;
1053 }
1054 StringBuilder data = new StringBuilder();
1055 Connection con = Utility.getConfigurationDBConnection();
1056 OutputStreamWriter out = null;
1057 PreparedStatement com = null;
1058 ResultSet rs = null;
1059 try {
1060
1061
1062 filelist.add(filenameandpath + getFilePathDelimitor() + "ProcessExport-" + toSafeFileName(url) + ".csv");
1063 out = new OutputStreamWriter(
1064 new FileOutputStream(filenameandpath + getFilePathDelimitor() + "ProcessExport-" + toSafeFileName(url) + ".csv"),
1065 Constants.CHARSET
1066 );
1067
1068
1069 data = data.append("%CLASSIFICATION% Generated at %DATETIME_NOW% for %DATETIME_FROM% until %DATETIME_TO% ").append(System.getProperty("line.separator"));
1070 data = data.append(url).append(System.getProperty("line.separator"));
1071 data = data.append("URI").
1072 append(delimiter).append("Timestamp (ms since epoch)").
1073 append(delimiter).append("Record Id").
1074 append(delimiter).append("Percent CPU").
1075 append(delimiter).append("Memory").
1076 append(delimiter).append("Threads").
1077 append(delimiter).append("Open Files").
1078 append(delimiter).append("Started At").
1079 append(System.getProperty("line.separator"));
1080
1081 Calendar time = Calendar.getInstance();
1082 String t = data.toString();
1083 String[] ampm = new String[]{"AM", "PM"};
1084 t = t.replaceAll("%DATETIME_NOW%",
1085 time.get(Calendar.YEAR) + "/"
1086 + (time.get(Calendar.MONTH) + 1) + "/"
1087 + time.get(Calendar.DATE) + " at "
1088 + time.get(Calendar.HOUR) + ":"
1089 + time.get(Calendar.MINUTE) + ":"
1090 + time.get(Calendar.SECOND) + " "
1091 + ampm[time.get(Calendar.AM_PM)]);
1092 time = request.getRange().getStart();
1093 t = t.replaceAll("%DATETIME_FROM%",
1094 time.get(Calendar.YEAR) + "/"
1095 + (time.get(Calendar.MONTH) + 1) + "/"
1096 + time.get(Calendar.DATE) + " "
1097 + time.get(Calendar.HOUR) + ":"
1098 + time.get(Calendar.MINUTE) + ":"
1099 + time.get(Calendar.SECOND) + " "
1100 + ampm[time.get(Calendar.AM_PM)]);
1101 time = request.getRange().getEnd();
1102 t = t.replaceAll("%DATETIME_TO%",
1103 time.get(Calendar.YEAR) + "/"
1104 + (time.get(Calendar.MONTH) + 1) + "/"
1105 + time.get(Calendar.DATE) + " "
1106 + time.get(Calendar.HOUR) + ":"
1107 + time.get(Calendar.MINUTE) + ":"
1108 + time.get(Calendar.SECOND) + " "
1109 + ampm[time.get(Calendar.AM_PM)]);
1110
1111 if (request.getClassification() == null) {
1112 request.setClassification(security);
1113 }
1114 t = t.replaceAll("%CLASSIFICATION%", (Utility.ICMClassificationToString(request.getClassification().getClassification()) + " Caveat: " + request.getClassification().getCaveats()));
1115
1116 t += System.getProperty("line.separator");
1117 out.write(t, 0, t.length());
1118
1119 com = con.prepareStatement(
1120 "select * from rawdatamachineprocess "
1121 + "where uri=? and utcdatetime > ? and utcdatetime < ? order by utcdatetime desc ;");
1122 com.setString(1, url);
1123 com.setLong(2, request.getRange().getStart().getTimeInMillis());
1124 com.setLong(3, request.getRange().getEnd().getTimeInMillis());
1125
1126
1127
1128
1129
1130 rs = com.executeQuery();
1131 while (rs.next()) {
1132 data = new StringBuilder();
1133 data = data.append(rs.getString("uri")).
1134 append(delimiter).append(rs.getLong("utcdatetime")).
1135 append(delimiter).append(rs.getString("id")).
1136 append(delimiter).append(rs.getInt("percentCPU"));
1137 Long l = rs.getLong("memoryused");
1138 if (l != null) {
1139 data = data.append(delimiter).append(l.toString());
1140 }
1141 l = rs.getLong("threads");
1142 if (l != null) {
1143 data = data.append(delimiter).append(l.toString());
1144 }
1145 l = rs.getLong("openfiles");
1146 if (l != null) {
1147 data = data.append(delimiter).append(l.toString());
1148 }
1149 l = rs.getLong("startedat");
1150 if (l != null) {
1151 data = data.append(delimiter).append(l.toString());
1152 }
1153 data = data.append(System.getProperty("line.separator"));
1154 t = data.toString();
1155 out.write(t, 0, t.length());
1156
1157 }
1158
1159 } catch (Exception ex) {
1160 log.log(Level.ERROR, "", ex);
1161 } finally {
1162 DBUtils.safeClose(rs);
1163 DBUtils.safeClose(com);
1164 DBUtils.safeClose(con);
1165 if (out != null) {
1166 try {
1167 out.close();
1168 } catch (Exception ex) {
1169 }
1170 }
1171 }
1172 }
1173
1174 }