Author: jleroux Date: Fri May 17 14:21:02 2013 New Revision: 1483822 URL: http://svn.apache.org/r1483822 Log: Improves the Metrics stats by adding a new column used only by requests. It's quite useful to measure the real (not smoothed) durations of events in notably *chained* requests.
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/common/src/org/ofbiz/common/CommonServices.java ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml ofbiz/trunk/framework/webtools/widget/StatsForms.xml 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=1483822&r1=1483821&r2=1483822&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 Fri May 17 14:21:02 2013 @@ -53,6 +53,12 @@ public interface Metrics { */ double getServiceRate(); + /** + * Returns a moving average of the request rate in milliseconds. The default + * implementation divides the total time by the total number of events + */ + double getRequestRate(); + /** Returns the metric threshold. The meaning of the threshold is * determined by client code. * <p>The idea is for client code to compare {@link #getServiceRate()} to @@ -69,6 +75,13 @@ public interface Metrics { */ void recordServiceRate(int numEvents, long time); + /** + * Records the request time for <code>numEvents</code> taking + * <code>time</code> milliseconds to be processed. + */ + void recordRequestRate(int numEvents, long time); + /** Resets all metrics. */ void reset(); + } \ No newline at end of file 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=1483822&r1=1483821&r2=1483822&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 Fri May 17 14:21:02 2013 @@ -144,6 +144,7 @@ public final class MetricsFactory { private long lastTime = System.currentTimeMillis(); @LockedBy("this") private double serviceRate = 0.0; + private double requestRate = 0.0; @LockedBy("this") private long totalServiceTime = 0; @LockedBy("this") @@ -187,6 +188,11 @@ public final class MetricsFactory { } @Override + public synchronized double getRequestRate() { + return requestRate; + } + + @Override public double getThreshold() { return threshold; } @@ -220,9 +226,17 @@ public final class MetricsFactory { } } + public synchronized void recordRequestRate(int numEvents, long time) { + totalEvents += numEvents; + cumulativeEvents += numEvents; + totalServiceTime += time; + requestRate = totalServiceTime / cumulativeEvents; + } + @Override public synchronized void reset() { serviceRate = 0.0; + requestRate = 0.0; count = 0; lastTime = System.currentTimeMillis(); totalEvents = totalServiceTime = cumulativeEvents = 0; @@ -247,6 +261,11 @@ public final class MetricsFactory { } @Override + public double getRequestRate() { + return 0; + } + + @Override public double getThreshold() { return 0.0; } @@ -261,6 +280,10 @@ public final class MetricsFactory { } @Override + public void recordRequestRate(int numEvents, long time) { + } + + @Override public void reset() { } } Modified: ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java?rev=1483822&r1=1483821&r2=1483822&view=diff ============================================================================== --- ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java (original) +++ ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java Fri May 17 14:21:02 2013 @@ -552,6 +552,7 @@ public class CommonServices { Map<String, Object> metricsMap = FastMap.newInstance(); metricsMap.put("name", metrics.getName()); metricsMap.put("serviceRate", metrics.getServiceRate()); + metricsMap.put("requestRate", metrics.getRequestRate()); metricsMap.put("threshold", metrics.getThreshold()); metricsMap.put("totalEvents", metrics.getTotalEvents()); metricsMapList.add(metricsMap); 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=1483822&r1=1483821&r2=1483822&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 Fri May 17 14:21:02 2013 @@ -109,6 +109,7 @@ public class RequestHandler { GenericValue userLogin, Delegator delegator) throws RequestHandlerException, RequestHandlerExceptionAllowExternalRequests { long startTime = System.currentTimeMillis(); + int numEvent = 1; HttpSession session = request.getSession(); // get the controllerConfig once for this method so we don't have to get it over and over inside the method @@ -421,6 +422,11 @@ public class RequestHandler { ServerHitBin.countEvent(cname + "." + requestMap.event.invoke, request, eventStartTime, System.currentTimeMillis() - eventStartTime, userLogin); } + if (requestMap.metrics != null) { + requestMap.metrics.recordRequestRate(numEvent, System.currentTimeMillis() - eventStartTime); + numEvent = 0; + } + // set the default event return if (eventReturn == null) { @@ -676,7 +682,7 @@ public class RequestHandler { } } if (requestMap.metrics != null) { - requestMap.metrics.recordServiceRate(1, System.currentTimeMillis() - startTime); + requestMap.metrics.recordServiceRate(numEvent, System.currentTimeMillis() - startTime); } } Modified: ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml?rev=1483822&r1=1483821&r2=1483822&view=diff ============================================================================== --- ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml (original) +++ ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml Fri May 17 14:21:02 2013 @@ -3405,8 +3405,13 @@ <value xml:lang="ja">ã¡ããªãã¯ã¹</value> <value xml:lang="zh">度é</value> </property> - <property key="WebtoolsMetricsRate"> + <property key="WebtoolsMetricsRequestRate"> + <value xml:lang="en">Request/Event Rate (mS)</value> + <value xml:lang="fr">Durée des requêtes/évènements (mS)</value> + </property> + <property key="WebtoolsMetricsServiceRate"> <value xml:lang="en">Service Rate (mS)</value> + <value xml:lang="fr">Durée des Services (mS)</value> <value xml:lang="ja">ãµã¼ãã¹ã¬ã¼ã(ããªç§)</value> <value xml:lang="zh">æå¡éçï¼æ¯«ç§ï¼</value> </property> @@ -5053,7 +5058,7 @@ <property key="WebtoolsStatsNoRequests"> <value xml:lang="de">Es wurden keine Anfragestatistiken gefunden.</value> <value xml:lang="en">No Request statistics found.</value> - <value xml:lang="fr">Aucune requêt de statistiques trouvée</value> + <value xml:lang="fr">Aucune requête de statistiques trouvée</value> <value xml:lang="it">Nessuna statistica delle request trovata.</value> <value xml:lang="ja">ãªã¯ã¨ã¹ãçµ±è¨ã¯ããã¾ãã</value> <value xml:lang="pt">Nenhum pedido de estatÃÂsticas encontrado.</value> Modified: ofbiz/trunk/framework/webtools/widget/StatsForms.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/widget/StatsForms.xml?rev=1483822&r1=1483821&r2=1483822&view=diff ============================================================================== --- ofbiz/trunk/framework/webtools/widget/StatsForms.xml (original) +++ ofbiz/trunk/framework/webtools/widget/StatsForms.xml Fri May 17 14:21:02 2013 @@ -49,13 +49,14 @@ under the License. <form name="ListMetrics" type="list" list-name="metricsList" paginate-target="ViewMetrics" header-row-style="header-row-2" default-table-style="basic-table light-grid"> <actions> - <service service-name="getAllMetrics" /> - </actions> - <field name="name" title="${uiLabelMap.CommonName}"><display/></field> - <field name="serviceRate" title="${uiLabelMap.WebtoolsMetricsRate}"><display/></field> - <field name="threshold" title="${uiLabelMap.WebtoolsMetricsThreshold}"><display/></field> - <field name="totalEvents" title="${uiLabelMap.WebtoolsMetricsTotalEvents}"><display/></field> - <field name="resetMetric" title=" " widget-area-style="button-col"> + <service service-name="getAllMetrics" /> + </actions> + <field name="name" title="${uiLabelMap.CommonName}"><display/></field> + <field name="serviceRate" title="${uiLabelMap.WebtoolsMetricsServiceRate}"><display/></field> + <field name="requestRate" title="${uiLabelMap.WebtoolsMetricsRequestRate}"><display/></field> + <field name="threshold" title="${uiLabelMap.WebtoolsMetricsThreshold}"><display/></field> + <field name="totalEvents" title="${uiLabelMap.WebtoolsMetricsTotalEvents}"><display/></field> + <field name="resetMetric" title=" " widget-area-style="button-col"> <hyperlink description="${uiLabelMap.CommonReset}" target="ResetMetric"> <parameter param-name="name"/> </hyperlink>