1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.mortbay.jetty.handler;
16
17 import java.io.IOException;
18
19 import javax.servlet.ServletException;
20 import javax.servlet.http.HttpServletRequest;
21 import javax.servlet.http.HttpServletResponse;
22
23 import org.mortbay.jetty.HttpConnection;
24 import org.mortbay.jetty.Request;
25 import org.mortbay.jetty.Response;
26
27 public class StatisticsHandler extends HandlerWrapper
28 {
29 transient long _statsStartedAt;
30
31 transient int _requests;
32
33 transient long _requestsDurationMin;
34 transient long _requestsDurationMax;
35 transient long _requestsDurationTotal;
36
37 transient int _requestsActive;
38 transient int _requestsActiveMin;
39 transient int _requestsActiveMax;
40 transient int _responses1xx;
41 transient int _responses2xx;
42 transient int _responses3xx;
43 transient int _responses4xx;
44 transient int _responses5xx;
45
46
47
48 public void statsReset()
49 {
50 synchronized(this)
51 {
52 if (isStarted())
53 _statsStartedAt=System.currentTimeMillis();
54 _requests=0;
55 _requestsActiveMax=_requestsActive;
56 _responses1xx=0;
57 _responses2xx=0;
58 _responses3xx=0;
59 _responses4xx=0;
60 _responses5xx=0;
61
62 _requestsActiveMin=_requestsActive;
63 _requestsActiveMax=_requestsActive;
64 _requestsActive=0;
65
66 _requestsDurationMin=0;
67 _requestsDurationMax=0;
68 _requestsDurationTotal=0;
69 }
70 }
71
72
73
74 public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch) throws IOException, ServletException
75 {
76 final Request base_request=(request instanceof Request)?((Request)request):HttpConnection.getCurrentConnection().getRequest();
77 final Response base_response=(response instanceof Response)?((Response)response):HttpConnection.getCurrentConnection().getResponse();
78
79 try
80 {
81 synchronized(this)
82 {
83 _requests++;
84 _requestsActive++;
85 if (_requestsActive>_requestsActiveMax)
86 _requestsActiveMax=_requestsActive;
87 }
88
89 super.handle(target, request, response, dispatch);
90 }
91 finally
92 {
93 synchronized(this)
94 {
95 _requestsActive--;
96 if (_requestsActive<0)
97 _requestsActive=0;
98 if (_requestsActive < _requestsActiveMin)
99 _requestsActiveMin=_requestsActive;
100
101 long duration = System.currentTimeMillis()-base_request.getTimeStamp();
102
103 _requestsDurationTotal+=duration;
104 if (_requestsDurationMin==0 || duration<_requestsDurationMin)
105 _requestsDurationMin=duration;
106 if (duration>_requestsDurationMax)
107 _requestsDurationMax=duration;
108
109 switch(base_response.getStatus()/100)
110 {
111 case 1: _responses1xx++;break;
112 case 2: _responses2xx++;break;
113 case 3: _responses3xx++;break;
114 case 4: _responses4xx++;break;
115 case 5: _responses5xx++;break;
116 }
117
118 }
119 }
120 }
121
122
123 protected void doStart() throws Exception
124 {
125 super.doStart();
126 _statsStartedAt=System.currentTimeMillis();
127 }
128
129
130 protected void doStop() throws Exception
131 {
132 super.doStop();
133 }
134
135
136
137
138
139
140
141 public int getRequests() {return _requests;}
142
143
144
145
146
147
148 public int getRequestsActive() {return _requestsActive;}
149
150
151
152
153
154
155 public int getRequestsActiveMax() {return _requestsActiveMax;}
156
157
158
159
160
161
162
163 public int getResponses1xx() {return _responses1xx;}
164
165
166
167
168
169
170
171 public int getResponses2xx() {return _responses2xx;}
172
173
174
175
176
177
178
179 public int getResponses3xx() {return _responses3xx;}
180
181
182
183
184
185
186
187 public int getResponses4xx() {return _responses4xx;}
188
189
190
191
192
193
194
195 public int getResponses5xx() {return _responses5xx;}
196
197
198
199
200
201 public long getStatsOnMs()
202 {
203 return System.currentTimeMillis()-_statsStartedAt;
204 }
205
206
207
208
209
210 public int getRequestsActiveMin()
211 {
212 return _requestsActiveMin;
213 }
214
215
216
217
218
219 public long getRequestsDurationMin()
220 {
221 return _requestsDurationMin;
222 }
223
224
225
226
227
228 public long getRequestsDurationTotal()
229 {
230 return _requestsDurationTotal;
231 }
232
233
234
235
236
237
238 public long getRequestsDurationAve() {return _requests==0?0:(_requestsDurationTotal/_requests);}
239
240
241
242
243
244
245 public long getRequestsDurationMax() {return _requestsDurationMax;}
246
247
248 }