Yes sorry, this was a 1st try I did before changing directly in factory, I 
forgot to remove, I will. 
Always better to have at least 2 pairs of  eyes...

Jacques

From: "Adrian Crum" <[email protected]>
> This looks good, but please leave the thread-safe fields as final. See 
> inline comment...
> 
> On 5/23/2013 8:55 AM, [email protected] wrote:
>> Author: jleroux
>> Date: Thu May 23 07:55:14 2013
>> New Revision: 1485601
>>
>> URL: http://svn.apache.org/r1485601
>> Log:
>> Add a mean to collect and show the Requests Events durations using Metrics  
>> https://issues.apache.org/jira/browse/OFBIZ-5198
>> Fulfill the goal with some more:
>> * makes the Metrics main parameters (estimationSize, estimationTime and 
>> smoothing) dynamically changeable (added in serverstats.properties)
>> * there is no threshold handling for event metrics
>>
>> Modified:
>>      ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/Metrics.java
>>      
>> ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/MetricsFactory.java
>>      ofbiz/trunk/framework/webapp/config/serverstats.properties
>>      ofbiz/trunk/framework/webapp/dtd/site-conf.xsd
>>      
>> ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ConfigXMLReader.java
>>      
>> ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java
>>
>> Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/Metrics.java
>> URL: 
>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/Metrics.java?rev=1485601&r1=1485600&r2=1485601&view=diff
>> ==============================================================================
>> --- ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/Metrics.java 
>> (original)
>> +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/Metrics.java Thu 
>> May 23 07:55:14 2013
>> @@ -28,6 +28,7 @@
>>    */
>>   package org.ofbiz.base.metrics;
>>   
>> +
>>   /**
>>    * An object that tracks service metrics.
>>    * <p>This interface and its default implementation are based on the
>> @@ -36,11 +37,6 @@ package org.ofbiz.base.metrics;
>>    * @see <a href="http://www.eecs.harvard.edu/~mdw/proj/seda/";>SEDA</a>
>>    */
>>   public interface Metrics {
>> -
>> -    public static final int ESTIMATION_SIZE = 100;
>> -    public static final long ESTIMATION_TIME = 1000;
>> -    public static final double SMOOTHING = 0.7;
>> -
>>       /**
>>        * Returns the name of the metric.
>>        */
>>
>> Modified: 
>> ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/MetricsFactory.java
>> URL: 
>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/MetricsFactory.java?rev=1485601&r1=1485600&r2=1485601&view=diff
>> ==============================================================================
>> --- 
>> ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/MetricsFactory.java 
>> (original)
>> +++ 
>> ofbiz/trunk/framework/base/src/org/ofbiz/base/metrics/MetricsFactory.java 
>> Thu May 23 07:55:14 2013
>> @@ -34,6 +34,7 @@ import java.util.TreeSet;
>>   import org.ofbiz.base.lang.LockedBy;
>>   import org.ofbiz.base.lang.ThreadSafe;
>>   import org.ofbiz.base.util.Assert;
>> +import org.ofbiz.base.util.UtilProperties;
>>   import org.ofbiz.base.util.cache.UtilCache;
>>   import org.w3c.dom.Element;
>>   
>> @@ -42,7 +43,6 @@ import org.w3c.dom.Element;
>>    */
>>   @ThreadSafe
>>   public final class MetricsFactory {
>> -
>>       private static final UtilCache<String, Metrics> METRICS_CACHE = 
>> UtilCache.createUtilCache("base.metrics", 0, 0);
>>       /**
>>        * A "do-nothing" <code>Metrics</code> instance.
>> @@ -73,17 +73,17 @@ public final class MetricsFactory {
>>           Assert.notEmpty("name attribute", name);
>>           Metrics result = METRICS_CACHE.get(name);
>>           if (result == null) {
>> -            int estimationSize = Metrics.ESTIMATION_SIZE;
>> +            int estimationSize = 
>> UtilProperties.getPropertyAsInteger("serverstats", 
>> "metrics.estimation.size", 100);
>>               String attributeValue = 
>> element.getAttribute("estimation-size");
>>               if (!attributeValue.isEmpty()) {
>>                   estimationSize = Integer.parseInt(attributeValue);
>>               }
>> -            long estimationTime = Metrics.ESTIMATION_TIME;
>> +            long estimationTime = 
>> UtilProperties.getPropertyAsLong("serverstats", "metrics.estimation.time", 
>> 1000);
>>               attributeValue = element.getAttribute("estimation-time");
>>               if (!attributeValue.isEmpty()) {
>>                   estimationTime = Long.parseLong(attributeValue);
>>               }
>> -            double smoothing = Metrics.SMOOTHING;
>> +            double smoothing = 
>> UtilProperties.getPropertyNumber("serverstats", "metrics.smoothing.factor", 
>> 0.7);
>>               attributeValue = element.getAttribute("smoothing");
>>               if (!attributeValue.isEmpty()) {
>>                   smoothing = Double.parseDouble(attributeValue);
>> @@ -151,9 +151,9 @@ public final class MetricsFactory {
>>           @LockedBy("this")
>>           private long cumulativeEvents;
>>           private final String name;
> 
> Please keep these final.
> 
>> -        private final int estimationSize;
>> -        private final long estimationTime;
>> -        private final double smoothing;
>> +        private int estimationSize;
>> +        private long estimationTime;
>> +        private double smoothing;
>>           private final double threshold;
>>   
>>           private MetricsImpl(String name, int estimationSize, long 
>> estimationTime, double smoothing, double threshold) {
>>
>> Modified: ofbiz/trunk/framework/webapp/config/serverstats.properties
>> URL: 
>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/config/serverstats.properties?rev=1485601&r1=1485600&r2=1485601&view=diff
>> ==============================================================================
>> --- ofbiz/trunk/framework/webapp/config/serverstats.properties (original)
>> +++ ofbiz/trunk/framework/webapp/config/serverstats.properties Thu May 23 
>> 07:55:14 2013
>> @@ -50,3 +50,11 @@ stats.persist.SERVICE.hit=false
>>   # Specify whether a proxy sits in front of this app server
>>   # This allows VisitHandler to collect the client's real ip
>>   stats.proxy.enabled=false
>> +
>> +### Metric parameters (moving average)
>> +# size of the considered subset (defines the window size)
>> +metrics.estimation.size=100
>> +# minimum time considered between 2 samplings for taking a record or not 
>> (must be > to metrics.estimation.time)
>> +metrics.estimation.time=1000
>> +# used to smooth the differences between calculations. A value of "1" 
>> disables smoothing
>> +metrics.smoothing.factor=0.7
>>
>> Modified: ofbiz/trunk/framework/webapp/dtd/site-conf.xsd
>> URL: 
>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/dtd/site-conf.xsd?rev=1485601&r1=1485600&r2=1485601&view=diff
>> ==============================================================================
>> --- ofbiz/trunk/framework/webapp/dtd/site-conf.xsd (original)
>> +++ ofbiz/trunk/framework/webapp/dtd/site-conf.xsd Thu May 23 07:55:14 2013
>> @@ -342,8 +342,8 @@ under the License.
>>       <xs:element name="metric">
>>           <xs:annotation>
>>               <xs:documentation>
>> -                Calculate and maintain an average response time for this 
>> request. Request metrics can be used
>> -                for monitoring and reporting. Metrics can also be used to 
>> trigger an alternate
>> +                Calculate and maintain a moving average response time for a 
>> Request or Event. Request Metrics can be used
>> +                for monitoring and reporting, Event Metrics only for 
>> reporting. Request Metrics can also be used to trigger an alternate
>>                   response if the optional threshold attribute is used.
>>                   
>>                   The metric works by gathering statistics until a 
>> configurable maximum is reached (number of
>> @@ -402,6 +402,9 @@ under the License.
>>               </xs:documentation>
>>           </xs:annotation>
>>           <xs:complexType>
>> +            <xs:sequence>
>> +                <xs:element minOccurs="0" ref="metric"/>
>> +            </xs:sequence>
>>               <xs:attributeGroup ref="attlist.event"/>
>>           </xs:complexType>
>>       </xs:element>
>>
>> Modified: 
>> ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ConfigXMLReader.java
>> URL: 
>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ConfigXMLReader.java?rev=1485601&r1=1485600&r2=1485601&view=diff
>> ==============================================================================
>> --- 
>> ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ConfigXMLReader.java
>>  (original)
>> +++ 
>> ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/ConfigXMLReader.java
>>  Thu May 23 07:55:14 2013
>> @@ -588,12 +588,18 @@ public class ConfigXMLReader {
>>           public String path;
>>           public String invoke;
>>           public boolean globalTransaction = true;
>> +        public Metrics metrics = null;
>>   
>>           public Event(Element eventElement) {
>>               this.type = eventElement.getAttribute("type");
>>               this.path = eventElement.getAttribute("path");
>>               this.invoke = eventElement.getAttribute("invoke");
>>               this.globalTransaction = 
>> !"false".equals(eventElement.getAttribute("global-transaction"));
>> +            // Get metrics.
>> +            Element metricsElement = 
>> UtilXml.firstChildElement(eventElement, "metric");
>> +            if (metricsElement != null) {
>> +                this.metrics = MetricsFactory.getInstance(metricsElement);
>> +            }
>>           }
>>   
>>           public Event(String type, String path, String invoke, boolean 
>> globalTransaction) {
>>
>> Modified: 
>> ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java
>> URL: 
>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java?rev=1485601&r1=1485600&r2=1485601&view=diff
>> ==============================================================================
>> --- 
>> ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java
>>  (original)
>> +++ 
>> ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java
>>  Thu May 23 07:55:14 2013
>> @@ -170,6 +170,7 @@ public class RequestHandler {
>>           }
>>           ConfigXMLReader.RequestMap originalRequestMap = requestMap; // 
>> Save this so we can update the correct performance metrics.
>>   
>> +
>>           boolean interruptRequest = false;
>>   
>>           // Check for chained request.
>> @@ -416,6 +417,10 @@ public class RequestHandler {
>>   
>>                       // run the request event
>>                       eventReturn = this.runEvent(request, response, 
>> requestMap.event, requestMap, "request");
>> +
>> +                    if (requestMap.event.metrics != null) {
>> +                        requestMap.event.metrics.recordServiceRate(1, 
>> System.currentTimeMillis() - startTime);
>> +                    }
>>   
>>                       // save the server hit for the request event
>>                       if (this.trackStats(request)) {
>>
>>
>

Reply via email to