At first glance, this might seem like a duplication of ServerHitBin.java, but it isn't. The metrics Java code will be in the base component, and it is designed to be used to measure any part of the project, not just web app requests.

-Adrian

On 7/14/2012 12:28 PM, Jacopo Cappellato wrote:
Adrian,

thank you for the clear description and proposal; I like it very much and I 
would be happy to see it in OFBiz.

Regards,

Jacopo

On Jul 14, 2012, at 12:38 PM, Adrian Crum wrote:

I have an application metrics feature working on my local copy and I was 
wondering if there would be any interest in including it in the project.

A metric is a measure of average execution time. Each metric is given a unique 
name.

I modified the control servlet and service dispatcher to use metrics. To add a 
metric to a request, just include an XML element:

<metric name="URL: webtools/main" />

to the request map and the average response time for the URL will be 
maintained. Likewise, to add a metric to a service, just include an XML element:

<metric name="Service: createMaintsFromTimeInterval" />

to the service definition and the average execution time for the service will 
be maintained.

Metrics are kept in memory. There is a service to retrieve all metrics. There 
is also a Web Tools page to view all metrics.

A heartbeat server could retrieve the metrics to check on server load or to 
provide histograms.

The metric element has an optional threshold attribute, so some action could be 
taken when the metric crosses a threshold. For example, in the following 
request map:

<request-map uri="ViewMetrics">
    <security https="true" auth="true"/>
    <metric name="URL: webtools/ViewMetrics" threshold="1000"/>
    <response name="success" type="view" value="ViewMetrics"/>
    <response name="threshold-exceeded" type="view" value="ServerBusy"/><!-- 
displays a friendly 'server busy' page -->
</request-map>

the ServerBusy view would be rendered if the average response time exceeded 
1000 mS. This can be useful for providing a lively web experience on a 
heavy-traffic web page.

The service dispatcher does not use the threshold. I could not think of a use 
case where service behavior should be modified based on average execution time.

The metrics code is very small - two java files. Also, the modifications to the 
webapp component and service component are very small.

What do you think?

-Adrian



Reply via email to