On Wed, Jul 17, 2013 at 5:49 PM, André Warnier <a...@ice-sa.com> wrote:
> Shariq wrote: > >> Hi, >> >> My requirement is to measure the request and response bandwidth of a >> webapp >> that's deployed in Tomcat. Basically capture each request and response >> bandwidth and store the statistics and do analytics on that data overtime. >> > > Bandwith > (http://en.wikipedia.org/wiki/**Bandwidth_%28computing%29<http://en.wikipedia.org/wiki/Bandwidth_%28computing%29> > ) > refers to a number of bits/second transmitted over a communications > channel. > > This is typically something better captured by network equipment > (analysers, routers, switches), and it doesn't really make much sense on an > application base. > > Apart from that, the AccesLogValve can already tell you, on a URL base, > how much total time was needed to fulfill the request, and how many bytes > (x 8 bits) were sent as a response. (You can probably also get the number > of bytes of the request). > > But Tomcat is not the only element which intervenes here, and the real > bandwidth can also be limited by what the client (and everything > in-between) can absorb. > > Maybe before we go any further into this, you would like to make more > clear what exactly you are trying to measure, and for which purpose ? > What I am trying to measure is the size (number of bytes) of the request / response for a webapp. So overtime we can produce statistics such as, for a given time interval how much bytes was served by server / tomcat for a particular webapp. Also we are looking to throttle webapps consuming a high bandwidth etc. The idea is gather raw statistics and process / aggregate them overtime ... > >> We've already written a custom Tomcat Valve to capture plenty of >> information regarding requests coming to a webapp. Since both request and >> response go through the Valve, I think there should be a way to capture >> bandwidth stats in the Valve, but haven't found out how to do it. >> >> One thing we've done previously is to get this information using the >> Tomcat >> RequestInfo.java class. This however doesn't seem like a clean solution. >> While digging into the tomcat code, I noticed that we can get the >> org.apache.coyote.Request object (that's used in RequestInfo class) in the >> Valve as follows; >> >> *org.apache.catalina.**connector.request.**getCoyoteRequest().** >> getBytesRead(); >> // 0org.apache.catalina.**connector.request.**getCoyoteRequest().** >> getResponse().**getContentWritten(); >> // 0* >> >> >> But both the above statement always returns 0, which is wrong compared to >> the output in RequestInfo class. >> >> Another thing I noticed is that we can get a RequestInfo object within the >> valve as follows; >> >> *reqProcessorMX = request.getCoyoteRequest().**getRequestProcessor();* >> >> Now if I try to use the *reqProcessorMX* object and call >> *getBytesSent()*method it returns the accumulated bytes count and not >> >> the per request >> bandwidth. This is what I've managed to gather so far. >> >> Any idea on what could be the issue? Why the coyote.Request is not >> returning the correct bandwidth in the Valve? Is there a better way to >> capture request/response bandwidth, within a Valve ?! >> >> Many thanks in advance. >> Thanks & Regards, >> Shariq. >> >> > > ------------------------------**------------------------------**--------- > To unsubscribe, e-mail: > users-unsubscribe@tomcat.**apache.org<users-unsubscr...@tomcat.apache.org> > For additional commands, e-mail: users-h...@tomcat.apache.org > >