KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > dinamica > PerformanceFilter


1 package dinamica;
2
3 import java.io.*;
4 import javax.servlet.*;
5 import javax.servlet.http.*;
6
7 /**
8  *
9  * Servlet filter to generate a performance log
10  * according to the configured filter map and
11  * the init parameter "limit". A value of 0 will
12  * log all requests, a value > 0 will log only those request
13  * whose execution takes more than "limit" milliseconds.
14  *
15  * <br>
16  * Creation date: 5/jan/2004<br>
17  * Last Update: 5/jan/2004<br>
18  * (c) 2003 Martin Cordova<br>
19  * This code is released under the LGPL license<br>
20  * @author Martin Cordova
21  *
22  */

23
24 public class PerformanceFilter implements Filter
25 {
26
27     //filter configuration object
28
private FilterConfig _config = null;
29
30     //log threshold (log requests that take more than N milliseconds)
31
private int _limit = 0;
32
33     /**
34     * init filter
35     **/

36     public void init(FilterConfig config) throws ServletException
37     {
38
39         _config = config;
40         
41         //load "limit" config parameter
42
String JavaDoc l = _config.getInitParameter("limit");
43         if (l!=null)
44             _limit = Integer.parseInt(l);
45
46     }
47
48     /**
49     * clean up
50     **/

51     public void destroy()
52     {
53            _config = null;
54     }
55
56     /**
57     * Filter main method
58     */

59     public void doFilter (
60                             ServletRequest request,
61                             ServletResponse response,
62                             FilterChain next
63                          )
64
65     throws IOException, ServletException
66
67     {
68
69         long t1 = 0;
70         long t2 = 0;
71
72         t1 = System.currentTimeMillis();
73
74         HttpServletRequest req = (HttpServletRequest) request;
75
76         //measure performance
77
try
78         {
79
80             t1 = System.currentTimeMillis();
81             next.doFilter(request, response);
82             t2 = System.currentTimeMillis();
83             long tt = t2-t1;
84
85             //save log if necessary
86
if (tt > _limit)
87             {
88                 saveLog(req, tt);
89             }
90
91         }
92
93         catch (Throwable JavaDoc e)
94         {
95             throw new ServletException(e);
96         }
97
98     }
99
100     /**
101      * Save performance record to output device (file, database table, etc.)
102      * @param req HTTP Servlet Request to extract useful information
103      * @param t Elapsed time in milliseconds
104      * @throws Throwable
105      */

106     void saveLog(HttpServletRequest req, long t) throws Throwable JavaDoc
107     {
108         String JavaDoc d = StringUtil.formatDate(new java.util.Date JavaDoc(), "yyyy-MM-dd HH:mm:ss");
109         String JavaDoc uri = req.getRequestURI();
110         String JavaDoc tt = String.valueOf(t);
111         String JavaDoc ip = req.getRemoteAddr();
112         String JavaDoc method = req.getMethod();
113         
114         String JavaDoc msg = d + "\t" + uri + "\t" + method + "\t" + ip + "\t" + tt;
115
116         String JavaDoc file = _config.getInitParameter("path");
117                 
118         StringUtil.saveMessage(file, msg);
119     }
120
121 }
Popular Tags