Added: commons/sandbox/monitoring/trunk/src/main/resources/jquery.tablesorter.pack.js URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/resources/jquery.tablesorter.pack.js?rev=633810&view=auto ============================================================================== --- commons/sandbox/monitoring/trunk/src/main/resources/jquery.tablesorter.pack.js (added) +++ commons/sandbox/monitoring/trunk/src/main/resources/jquery.tablesorter.pack.js Wed Mar 5 02:48:38 2008 @@ -0,0 +1 @@ +eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(8($){$.1V({I:D 8(){7 C=[],1d=[];k.2v={28:"3Z",2b:"48",29:"49",2P:"4a",2D:"4b",1I:1E,1w:"25",C:{},1d:[],1m:{S:["2c","2L"]},x:{},2u:K,2Q:13,u:[],1y:[],1l:"2O",J:K};8 17(s,d){1h(s+","+(D T().1e()-d.1e())+"4c")}k.17=17;8 1h(s){q(1u 1P!="2S"&&1u 1P.J!="2S"){1P.1h(s)}N{2V(s)}}8 1T(6,$x){q(6.f.J){7 1O=""}7 G=6.L[0].G;q(6.L[0].G[0]){7 Z=[],12=G[0].12,l=12.w;y(7 i=0;i<l;i++){7 p=K;q($.1o&&($($x[i]).16()&&$($x[i]).16().1g)){p=1K($($x[i]).16().1g)}N q((6.f.x[i]&&6.f.x[i].1g)){p=1K(6.f.x[i].1g)}q(!p){p=22(6.f,12[i])}q(6.f.J){1O+="1D:"+i+" 1B:"+p.B+"\\n"}Z.R(p)}}q(6.f.J){1h(1O)}m Z};8 22(f,V){7 l=C.w;y(7 i=1;i<l;i++){q(C[i].O($.1M(1Q(f,V)))){m C[i]}}m C[0]}8 1K(1 x){7 l=C.w;y(7 i=0;i<l;i++){q(C[i].B.14()==1x.14()){m C[i]}}m K}8 1U(6){q(6.f.J){7 23=D T()}7 19=(6.L[0]&&6.L[0].G.w)||0,2r=(6.L[0].G[0]&&6.L[0].G[0].12.w)||0,C=6.f.C,F={1c:[],1j:[]};y(7 i=0;i<19;++i){7 c=6.L[0].G[i],1p=[];F.1c.R($(c));y(7 j=0;j<2r;++j){1p.R(C[j].H(1Q(6.f,c.12[j]),6,c.12[j]))}1p.R(i);F.1j.R(1p);1p=1E};q(6.f.J){17("2W F y "+19+" G:",23)}m F};8 1Q(f,V){q(!V)m"";7 t="";q(f.1w=="25"){q(V.1L[0]&&V.1L[0].2X()){t=V.1L[0].1S}N{t=V.1S}}N{q(1u(f.1w)=="8"){t=f.1w(V)}N{t=$(V).1i()}}m t}8 1G(6,F){q(6.f.J){7 2U=D T()}7 c=F,r=c.1c,n=c.1j,19=n.w,1J=(n[0].w-1),2h=$(6.L[0]),G=[];y(7 i=0;i<19;i++){G.R(r[n[i][1J]]);q(!6.f.20){7 o=r[n[i][1J]];7 l=o.w;y(7 j=0;j<l;j++){2h[0].32(o[j])}}}q(6.f.20){6.f.20(6,G)}G=1E;q(6.f.J){17("4d 6:",2U)}1z(6)};8 2x(6){q(6.f.J){7 1f=D T()}7 1o=($.1o)?13:K,27=[];y(7 i=0;i<6.1t.G.w;i++){27[i]=0};$1r=$("35 37",6);$1r.1s(8(1F){k.1a=0;k.1D=1F;k.18=2B(6.f.2P);q(2d(k)||2e(6,1F))k.1C=13;q(!k.1C){$(k).1q(6.f.28)}6.f.1y[1F]=k});q(6.f.J){17("3a x:",1f);1h($1r) }m $1r};8 2K(6,G,1c){7 1k=[],r=6.1t.G,c=r[1c].12;y(7 i=0;i<c.w;i++){7 11=c[i];q(11.41>1){1k=1k.3b(2K(6,3c,1c++))}N{q(6.1t.w==1||(11.3e>1||!r[1c+1])){1k.R(11)}}}m 1k};8 2d(11){q(($.1o)&&($(11).16().1g===K)){m 13};m K}8 2e(6,i){q((6.f.x[i])&&(6.f.x[i].1g===K)){m 13};m K}8 1z(6){7 c=6.f.1d;7 l=c.w;y(7 i=0;i<l;i++){1Z(c[i]).H(6)}}8 1Z(1x){7 l=1d.w;y(7 i=0;i<l;i++){q(1d[i].B.14()==1x.14()){m 1d[i]}}};8 2B(v){q(1u(v)!="3i"){i=(v.14()=="3j")?1:0}N{i=(v==(0||1))?v:0}m i}8 2E(v,a){7 l=a.w;y(7 i=0;i<l;i++){q(a[i][0]==v){m 13}}m K}8 1W(6,$x,Z,S){$x.1H(S[0]).1H(S[1]);7 h=[];$x.1s(8(3L){q(!k.1C){h[k.1D]=$(k)}});7 l=Z.w;y(7 i=0;i<l;i++){h[Z[i][0]].1q(S[Z[i][1]])}}8 2z(6,$x){7 c=6.f;q(c.2u){7 1v=$(\'<1v>\');$("2j:3l 3H",6.L[0]).1s(8(){1v.3G($(\'<3o>\').S(\'2l\',$(k).2l()))});$(6).3r(1v)}}8 2M(6,u){7 c=6.f,l=u.w;y(7 i=0;i<l;i++){7 s=u[i],o=c.1y[s[0]];o.1a=s[1];o.1a++}}8 1Y(6,u,F){q(6.f.J){7 2m=D T()}7 Y="7 2k = 8(a,b) {",l=u.w;y(7 i=0;i<l;i++){7 c=u[i][0];7 18=u[i][1];7 s=(2s(6.f.C,c)=="1i" )?((18==0)?"2n":"2o"):((18==0)?"2p":"2q");7 e="e"+i;Y+="7 "+e+" = "+s+"(a["+c+"],b["+c+"]); ";Y+="q("+e+") { m "+e+"; } ";Y+="N { "}7 1N=F.1j[0].w-1;Y+="m a["+1N+"]-b["+1N+"];";y(7 i=0;i<l;i++){Y+="}; "}Y+="m 0; ";Y+="}; ";3t(Y);F.1j.3u(2k);q(6.f.J){17("3w 3x "+u.3z()+" 3A 3B "+18+" 1f:",2m)}m F};8 2n(a,b){m((a<b)?-1:((a>b)?1:0))};8 2o(a,b){m((b<a)?-1:((b>a)?1:0))};8 2p(a,b){m a-b};8 2q(a,b){m b-a};8 2s(C,i){m C[i].Q};k.2f=8(2w){m k.1s(8(){q(!k.1t||!k.L)m;7 $k,$3E,$x,F,f,3F=0,3I;k.f={};f=$.1V(k.f,$.I.2v,2w);$k=$(k);$x=2x(k);k.f.C=1T(k,$x);F=1U(k);7 1X=[f.29,f.2b];2z(k);$x.3K(8(e){7 19=($k[0].L[0]&&$k[0].L[0].G.w)||0;q(!k.1C&&19>0){7 $11=$(k);7 i=k.1D;k.18=k.1a++%2;q(!e[f.2D]){f.u=[];q(f.1I!=1E){7 a=f.1I;y(7 j=0;j<a.w;j++){f.u.R(a[j])}}f.u.R([i,k.18])}N{q(2E(i,f.u)){y(7 j=0;j<f.u.w;j++){7 s=f.u[j],o=f.1y[s[0]];q(s[0]==i){o.1a=s[1];o.1a++;s[1]=o.1a%2}}}N{f.u.R([i,k.18])}};$k.1R("3S");1W($k[0],$x,f.u,1X);3T(8(){1G($k[0],1Y($k[0],f.u,F));$k.1R("3U")},0);m K}}).3V(8(){q(f.2Q){k.3 X=8(){m K};m K}});$k.1n("3Y",8(){k.f.C=1T(k,$x);F=1U(k)}).1n("2J",8(e,Z){f.u=Z;7 u=f.u;2M(k,u);1W(k,$x,u,1X);1G(k,1Y(k,u,F))}).1n("44",8(){1G(k,F)}).1n("45",8(e,B){1Z(B).H(k)}).1n("47",8(){1z(k)});q($.1o&&($(k).16()&&$(k).16().2N)){f.u=$(k).16().2N}q(f.u.w>0){$k.1R("2J",[f.u])}1z(k)})};k.P=8(1B){7 l=C.w,a=13;y(7 i=0;i<l;i++){q(C[i].B.14()==1B.B.14()){a=K}}q(a){C.R(1B)}};k.2R=8(21){1d.R(21)};k.U=8(s){7 i=2Y(s);m(26(i))?0:i};k.2Z=8(s){7 i=30(s);m(26(i))?0:i};k.33=8(6){q($.34.36){8 2I(){38(k.2a)k.39(k.2a)}2I.3d(6.L[0])}N{6.L[0].1S=""}}}});$.3f.1V({I:$.I.2f});7 M=$.I;M.P({B:"1i",O:8(s){m 13},H:8(s){m $.1M(s.14())},Q:"1i"});M.P({B:"3k",O:8(s){m/^\\d+$/.15(s)},H:8(s){m $.I.U(s)},Q:"W"});M.P({B:"3m",O:8(s){m/^[3n£$3p¬?.]/.15(s)},H:8(s){m $.I.U(s.X(D 1b(/[^0-9.]/g),""))},Q:"W"});M.P({B:"3s",O:8(s){m s.2G(D 1b(/^(\\+|-)?[0-9]+\\.[0-9]+((E|e)(\\+|-)?[0-9]+)?$/))},H:8(s){m $.I.U(s.X(D 1b(/,/),""))},Q:"W"});M.P({B:"3v",O:8(s){m/^\\d{2,3}[\\.]\\d{2,3}[\\.]\\d{2,3}[\\.]\\d{2,3}$/.15(s )},H:8(s){7 a=s.3y("."),r="",l=a.w;y(7 i=0;i<l;i++){7 1A=a[i];q(1A.w==2){r+="0"+1A}N{r+=1A}}m $.I.U(r)},Q:"W"});M.P({B:"3J",O:8(s){m/^(2y?|2A|2C):\\/\\/$/.15(s)},H:8(s){m 2T.1M(s.X(D 1b(/(2y?|2A|2C):\\/\\//),\'\'))},Q:"1i"});M.P({B:"3P",O:8(s){m/^\\d{4}[\\/-]\\d{1,2}[\\/-]\\d{1,2}$/.15(s)},H:8(s){m $.I.U((s!="")?D T(s.X(D 1b(/-/g),"/")).1e():"0")},Q:"W"});M.P({B:"3Q",O:8(s){m/^\\d{1,3}%$/.15(s)},H:8(s){m $.I.U(s.X(D 1b(/%/g),""))},Q:"W"});M.P({B:"3R",O:8(s){m s.2G(D 1b(/^[A-3W-z]{3,10}\\.? [0-9]{1,2}, ([0-9]{4}|\'?[0-9]{2}) (([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\\s(40|42)))$/))},H:8(s){m $.I.U(D T(s).1e())},Q:"W"});M.P({B:"43",O:8(s){m/\\d{1,2}[\\/\\-]\\d{1,2}[\\/\\-]\\d{2,4}/.15(s)},H:8(s,6){7 c=6.f;s=s.X(/\\-/g,"/");q(c.1l=="2O"){s=s.X(/(\\d{1,2})[\\/\\-](\\d{1,2})[\\/\\-](\\d{4})/,"$3/$1/$2")}N q(c.1l=="46"){s=s.X(/(\\d{1,2})[\\/\\-](\\d{1,2})[\\/\\-](\\d{4})/,"$3/$2/$1")}N q(c.1l=="2t/24/2g"||c.1l=="2t-24-2g"){s=s.X(/(\\d{1,2})[\\/\\-](\\d{1,2})[\\/\\-](\\d{2} )/,"$1/$2/$3")}m $.I.U(D T(s).1e())},Q:"W"});M.P({B:"1f",O:8(s){m/^(([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\\s(3g|3h)))$/.15(s)},H:8(s){m $.I.U(D T("3q/2i/2i "+s).1e())},Q:"W"});M.P({B:"3D",O:8(s){m K},H:8(s,6,11){7 c=6.f,p=(!c.2F)?\'3M\':c.2F;m $(11).16()[p]},Q:"W"});M.2R({B:"31",H:8(6){q(6.f.J){7 1f=D T()}$("2j:3C",6.L[0]).2H(\':2c\').1H(6.f.1m.S[1]).1q(6.f.1m.S[0]).3O().2H(\':2L\').1H(6.f.1m.S[0]).1q(6.f.1m.S[1]);q(6.f.J){$.I.17("3N 4e 21",1f)}}})})(2T);',62,263,'||||||table|var|function|||||||config|||||this||return||||if||||sortList||length|headers|for|||id|parsers|new||cache|rows|format|tablesorter|debug|false|tBodies|ts|else|is|addParser|type|push|css|Date|formatFloat|node|numeric|replace|dynamicExp|list||cell|cells|true|toLowerCase|test|data|benchmark|order|totalRows|count|RegExp|row|widgets|getTime|time|sorter|log|text|normalized|arr|dateFormat|widgetZebra|bind|meta|cols|addClass|tableHeaders|each|tHead|typeof|colgroup|textExtraction|name|headerList|applyWi dget|item|parser|sortDisabled|column|null|index|appendToTable|removeClass|sortForce|checkCell|getParserById|childNodes|trim|orgOrderCol|parsersDebug|console|getElementText|trigger|innerHTML|buildParserCache|buildCache|extend|setHeadersCss|sortCSS|multisort|getWidgetById|appender|widget|detectParserForColumn|cacheTime|mm|simple|isNaN|tableHeadersRows|cssHeader|cssDesc|firstChild|cssAsc|even|checkHeaderMetadata|checkHeaderOptions|construct|yy|tableBody|01|tr|sortWrapper|width|sortTime|sortText|sortTextDesc|sortNumeric|sortNumericDesc|totalCells|getCachedSortType|dd|widthFixed|defaults|settings|buildHeaders|https|fixColumnWidth|ftp|formatSortingOrder|file|sortMultiSortKey|isValueInArray|parserMetadataName|match|filter|empty|sorton|checkCellColSpan|odd|updateHeaderSortCount|sortlist|us|sortInitialOrder|cancelSelection|addWidget|undefined|jQuery|appendTime|alert|Building|hasChildNodes|parseFloat|formatInt|parseInt|zebra|appendChild|clearTableBody|browser|thead|msie|th|while|remov eChild|Built|concat|headerArr|apply|rowSpan|fn|am|pm|Number|desc|integer|first|currency|Â|col|â|2000|prepend|floating|eval|sort|ipAddress|Sorting|on|split|toString|and|dir|visible|metadata|document|shiftDown|append|td|sortOrder|url|click|offset|sortValue|Applying|end|isoDate|percent|usLongDate|sortStart|setTimeout|sortEnd|mousedown|Za|onselectstart|update|header|AM|colSpan|PM|shortDate|appendCache|applyWidgetId|uk|applyWidgets|headerSortUp|headerSortDown|asc|shiftKey|ms|Rebuilt|Zebra'.split('|'),0,{}))
Propchange: commons/sandbox/monitoring/trunk/src/main/resources/jquery.tablesorter.pack.js ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/sandbox/monitoring/trunk/src/main/resources/jquery.tablesorter.pack.js ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/sandbox/monitoring/trunk/src/main/resources/jquery.tablesorter.pack.js ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: commons/sandbox/monitoring/trunk/src/main/webapp/WEB-INF/web.xml URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/webapp/WEB-INF/web.xml?rev=633810&view=auto ============================================================================== --- commons/sandbox/monitoring/trunk/src/main/webapp/WEB-INF/web.xml (added) +++ commons/sandbox/monitoring/trunk/src/main/webapp/WEB-INF/web.xml Wed Mar 5 02:48:38 2008 @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" + "http://java.sun.com/dtd/web-app_2_3.dtd"> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<web-app> + + <servlet> + <servlet-name>monitoring</servlet-name> + <servlet-class>org.apache.commons.monitoring.reporting.web.WebUIServlet</servlet-class> + </servlet> + + <servlet-mapping> + <servlet-name>monitoring</servlet-name> + <url-pattern>/monitoring/*</url-pattern> + </servlet-mapping> + +</web-app> \ No newline at end of file Propchange: commons/sandbox/monitoring/trunk/src/main/webapp/WEB-INF/web.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/sandbox/monitoring/trunk/src/main/webapp/WEB-INF/web.xml ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/sandbox/monitoring/trunk/src/main/webapp/WEB-INF/web.xml ------------------------------------------------------------------------------ svn:mime-type = text/xml Added: commons/sandbox/monitoring/trunk/src/main/webapp/test.html URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/webapp/test.html?rev=633810&view=auto ============================================================================== --- commons/sandbox/monitoring/trunk/src/main/webapp/test.html (added) +++ commons/sandbox/monitoring/trunk/src/main/webapp/test.html Wed Mar 5 02:48:38 2008 @@ -0,0 +1,90 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html> +<head> +<link rel='stylesheet' type='text/css' href='/monitoring/monitoring/resources/commons-monitoring.css' /> +<script type="text/javascript" src="/monitoring/monitoring/resources/jquery-1.2.3.pack.js"></script> +<script type="text/javascript" src="/monitoring/monitoring/resources/jquery.tablesorter.pack.js"></script> +<script type="text/javascript" src="/monitoring/monitoring/resources/commons-monitoring.js"></script> +</head> +<body> +<table cellspacing="1" id="monitoring"> + <thead> + <tr> + <th rowspan='2'>name</th> + <th rowspan='2'>category</th> + <th rowspan='2'>subsystem</th> + <td colspan='5'>concurrency</td> + <td colspan='7'>performances (ns)</td> + </tr> + <tr> + <th>value</th> + <th>min</th> + <th>max</th> + <th>mean</th> + <th>dev.</th> + <th>value</th> + <th>min</th> + <th>max</th> + <th>mean</th> + <th>dev.</th> + <th>sum</th> + <th>hits</th> + </tr> + </thead> + <tbody> + <tr> + <td>JsonRendererTest.setUp</td> + <td>test</td> + <td>reporting</td> + <td title='concurrency'>0</td> + <td>0</td> + <td>0</td> + <td>NaN</td> + <td>NaN</td> + <td title='performances'>10</td> + <td>10</td> + <td>10</td> + <td>10.0</td> + <td>NaN</td> + <td>10</td> + <td>1</td> + </tr> + <tr> + <td>JsonRendererTest.setDown</td> + <td>test</td> + <td>reporting</td> + <td title='concurrency'>5</td> + <td>5</td> + <td>5</td> + <td>5</td> + <td>5</td> + <td title='performances'>5</td> + <td>1</td> + <td>2</td> + <td>30.0</td> + <td>NaN</td> + <td>12</td> + <td>3</td> + </tr> + <tr> + <td>TestCase</td> + <td>test</td> + <td>junit</td> + <td title='concurrency'>1</td> + <td>1</td> + <td>1</td> + <td>0.0</td> + <td>NaN</td> + <td title='performances'>0</td> + <td>0</td> + <td>0</td> + <td>NaN</td> + <td>NaN</td> + <td>0</td> + <td>0</td> + </tr> + </tbody> +</table> +</body> +</html> \ No newline at end of file Propchange: commons/sandbox/monitoring/trunk/src/main/webapp/test.html ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/sandbox/monitoring/trunk/src/main/webapp/test.html ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/sandbox/monitoring/trunk/src/main/webapp/test.html ------------------------------------------------------------------------------ svn:mime-type = text/html Modified: commons/sandbox/monitoring/trunk/src/site/xdoc/instrumentation.xml URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/site/xdoc/instrumentation.xml?rev=633810&r1=633809&r2=633810&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/site/xdoc/instrumentation.xml (original) +++ commons/sandbox/monitoring/trunk/src/site/xdoc/instrumentation.xml Wed Mar 5 02:48:38 2008 @@ -55,13 +55,16 @@ <p> Monitors are registered in a repository, that ensure a monitor is unique for a name/category/subsytem Key. The repository is used to retrieve existing monitors and create new ones. The default repository - implementation <code>org.apache.commons.monitoring.impl.DefaultRepository</code> creates new Monitor - instance when a non-existing one is requested, so you don't have to worry about monitors management. + implementation <code>org.apache.commons.monitoring.impl.repositories.DefaultRepository</code> creates new + Monitor instance when a non-existing one is requested, so you don't have to worry about monitors management. <pre> Monitor monitor = repository.getMonitor( "MyService.myMethod" ); Monitor monitor = repository.getMonitor( "SoapEndpoint.process", "soap" ); Monitor monitor = repository.getMonitor( "/admin/userEdit.do", "struts", "user management" ); </pre> + You may use a custom repository by extending one of the provided implementations. You can also + use the <code>ConfigurableImplementationsRepository</code> implementation, when you only want to configure + custom implementation classes for StopWatches and Monitors. </p> </subsection> <subsection name="Counters and Gauges"> Modified: commons/sandbox/monitoring/trunk/src/site/xdoc/listeners.xml URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/site/xdoc/listeners.xml?rev=633810&r1=633809&r2=633810&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/site/xdoc/listeners.xml (original) +++ commons/sandbox/monitoring/trunk/src/site/xdoc/listeners.xml Wed Mar 5 02:48:38 2008 @@ -61,9 +61,8 @@ <p> The StopWatches used to monitor execution can be registered in the <code>ExecutionStack</code> utility class that maintain the set of active stopWatches for the current thread. It is recommended - to let the stopWatches register themselves by calling <code>DefaultStopWatch.setTraceExecution( true )</code> - at application startup, as all registered StopWatches MUST be removed before the thread stops or - proceed another task/request. + to let the stopWatches register themselves and cleaning the stack by configuring the Repository to use + <code>ExecutionStopWatch</code> StopWatch implementation. </p> <p> When the Listener on the business process detects some overload, it can look at the ExecutionStack Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/ExecutionStackTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/ExecutionStackTest.java?rev=633810&r1=633809&r2=633810&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/ExecutionStackTest.java (original) +++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/ExecutionStackTest.java Wed Mar 5 02:48:38 2008 @@ -17,10 +17,11 @@ package org.apache.commons.monitoring; -import org.apache.commons.monitoring.impl.DefaultStopWatch; - import junit.framework.TestCase; +import org.apache.commons.monitoring.impl.stopwatches.DefaultStopWatch; +import org.apache.commons.monitoring.impl.stopwatches.ExecutionStopWatch; + /** * * @author <a href="mailto:[EMAIL PROTECTED]">Nicolas De Loof</a> @@ -28,26 +29,17 @@ public class ExecutionStackTest extends TestCase { - public void testExcution() + public void testExecutionStopWatch() throws Exception { - DefaultStopWatch s1 = new DefaultStopWatch( null ); - ExecutionStack.push( s1 ); - DefaultStopWatch s2 = new DefaultStopWatch( null ); - ExecutionStack.push( s2 ); - DefaultStopWatch s3 = new DefaultStopWatch( null ); - ExecutionStack.push( s3 ); - - ExecutionStack.pause(); - assertTrue( s1.isPaused() ); - assertTrue( s2.isPaused() ); - assertTrue( s3.isPaused() ); - - ExecutionStack.resume(); - assertTrue( ! s1.isPaused() ); - assertTrue( ! s2.isPaused() ); - assertTrue( ! s3.isPaused() ); + StopWatch s1 = new ExecutionStopWatch( null ); + StopWatch s2 = new ExecutionStopWatch( null ); - ExecutionStack.clear(); + assertTrue( ExecutionStack.isTopLevel( s1 ) ); + assertTrue( ! ExecutionStack.isTopLevel( s2 ) ); + s2.stop(); + assertEquals( 2, ExecutionStack.getExecution().size() ); + s1.stop(); + assertTrue( ExecutionStack.getExecution().isEmpty() ); } } Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/MonitoringTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/MonitoringTest.java?rev=633810&r1=633809&r2=633810&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/MonitoringTest.java (original) +++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/MonitoringTest.java Wed Mar 5 02:48:38 2008 @@ -23,7 +23,7 @@ import junit.framework.TestCase; -import org.apache.commons.monitoring.impl.DefaultRepository; +import org.apache.commons.monitoring.impl.repositories.DefaultRepository; /** * @author <a href="mailto:[EMAIL PROTECTED]">Nicolas De Loof</a> Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/StopWatchTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/StopWatchTest.java?rev=633810&r1=633809&r2=633810&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/StopWatchTest.java (original) +++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/StopWatchTest.java Wed Mar 5 02:48:38 2008 @@ -17,7 +17,7 @@ package org.apache.commons.monitoring; -import org.apache.commons.monitoring.impl.DefaultStopWatch; +import org.apache.commons.monitoring.impl.stopwatches.DefaultStopWatch; import junit.framework.TestCase; Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/CompositeValuesMonitorTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/CompositeValuesMonitorTest.java?rev=633810&r1=633809&r2=633810&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/CompositeValuesMonitorTest.java (original) +++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/CompositeValuesMonitorTest.java Wed Mar 5 02:48:38 2008 @@ -21,6 +21,7 @@ import org.apache.commons.monitoring.Counter; import org.apache.commons.monitoring.Gauge; import org.apache.commons.monitoring.Monitor; +import org.apache.commons.monitoring.impl.monitors.CompositeValuesMonitor; import junit.framework.TestCase; Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/DefaultRepositoryTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/DefaultRepositoryTest.java?rev=633810&r1=633809&r2=633810&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/DefaultRepositoryTest.java (original) +++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/DefaultRepositoryTest.java Wed Mar 5 02:48:38 2008 @@ -22,6 +22,7 @@ import org.apache.commons.monitoring.Monitor; import org.apache.commons.monitoring.Repository; +import org.apache.commons.monitoring.impl.repositories.DefaultRepository; import junit.framework.TestCase; Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/ThreadSafeCounterTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/ThreadSafeCounterTest.java?rev=633810&r1=633809&r2=633810&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/ThreadSafeCounterTest.java (original) +++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/ThreadSafeCounterTest.java Wed Mar 5 02:48:38 2008 @@ -20,6 +20,7 @@ import junit.framework.TestCase; import org.apache.commons.monitoring.Counter; +import org.apache.commons.monitoring.impl.values.ThreadSafeCounter; public class ThreadSafeCounterTest extends TestCase Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/ThreadSafeGaugeTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/ThreadSafeGaugeTest.java?rev=633810&r1=633809&r2=633810&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/ThreadSafeGaugeTest.java (original) +++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/impl/ThreadSafeGaugeTest.java Wed Mar 5 02:48:38 2008 @@ -20,6 +20,7 @@ import junit.framework.TestCase; import org.apache.commons.monitoring.Gauge; +import org.apache.commons.monitoring.impl.values.ThreadSafeGauge; public class ThreadSafeGaugeTest extends TestCase Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/listener/SecondaryReposioryTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/listener/SecondaryReposioryTest.java?rev=633810&r1=633809&r2=633810&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/listener/SecondaryReposioryTest.java (original) +++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/listener/SecondaryReposioryTest.java Wed Mar 5 02:48:38 2008 @@ -18,7 +18,7 @@ package org.apache.commons.monitoring.listener; import org.apache.commons.monitoring.Repository; -import org.apache.commons.monitoring.impl.DefaultRepository; +import org.apache.commons.monitoring.impl.repositories.DefaultRepository; import org.apache.commons.monitoring.listeners.SecondaryRepository; import junit.framework.TestCase; @@ -33,7 +33,7 @@ public void testSecondaryRepository() throws Exception { - Repository primary = new DefaultRepository(); + Repository.Observable primary = new DefaultRepository(); primary.getMonitor( "test" ).getCounter( "COUNTER" ).add( 10 ); primary.getMonitor( "test" ).getGauge( "GAUGE" ).set( 5 ); Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/listener/ThresholdListenerTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/listener/ThresholdListenerTest.java?rev=633810&r1=633809&r2=633810&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/listener/ThresholdListenerTest.java (original) +++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/listener/ThresholdListenerTest.java Wed Mar 5 02:48:38 2008 @@ -22,7 +22,7 @@ import org.apache.commons.monitoring.Counter; import org.apache.commons.monitoring.Monitor; import org.apache.commons.monitoring.StatValue; -import org.apache.commons.monitoring.impl.CreateValuesOnDemandMonitor; +import org.apache.commons.monitoring.impl.monitors.CreateValuesOnDemandMonitor; import org.apache.commons.monitoring.listeners.ThresholdListener; /** Modified: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java?rev=633810&r1=633809&r2=633810&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java (original) +++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/RendererTest.java Wed Mar 5 02:48:38 2008 @@ -17,7 +17,6 @@ package org.apache.commons.monitoring.reporting; -import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Collection; @@ -28,7 +27,7 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.monitoring.Monitor; -import org.apache.commons.monitoring.impl.CreateValuesOnDemandMonitor; +import org.apache.commons.monitoring.impl.monitors.CreateValuesOnDemandMonitor; public class RendererTest extends TestCase @@ -40,14 +39,12 @@ throws Exception { monitors = new LinkedList<Monitor>(); - Monitor m1 = new CreateValuesOnDemandMonitor( - new Monitor.Key( "JsonRendererTest.setUp", "test", "reporting" ) ); + Monitor m1 = new CreateValuesOnDemandMonitor( new Monitor.Key( "JsonRendererTest.setUp", "test", "reporting" ) ); m1.getCounter( Monitor.PERFORMANCES ).add( 10 ); m1.getGauge( Monitor.CONCURRENCY ); monitors.add( m1 ); - Monitor m2 = new CreateValuesOnDemandMonitor( - new Monitor.Key( "TestCase", "test", "junit" ) ); + Monitor m2 = new CreateValuesOnDemandMonitor( new Monitor.Key( "TestCase", "test", "junit" ) ); m2.getCounter( Monitor.PERFORMANCES ); m2.getGauge( Monitor.CONCURRENCY ).increment(); monitors.add( m2 ); @@ -56,42 +53,38 @@ public void testRenderToJson() throws Exception { - StringWriter out = new StringWriter(); - Renderer renderer = new JsonRenderer( new PrintWriter( out ), Renderer.DEFAULT_ROLES ); - renderer.render( monitors ); - assertEqualsIgnoreLineEnds( expected( "js" ), out.toString() ); + assertExpectedRendering( new JsonRenderer(), "js" ); } public void testRenderToXml() throws Exception { - StringWriter out = new StringWriter(); - Renderer renderer = new XmlRenderer( new PrintWriter( out ), Renderer.DEFAULT_ROLES ); - renderer.render( monitors ); - assertEqualsIgnoreLineEnds( expected( "xml" ), out.toString() ); + assertExpectedRendering( new XmlRenderer(), "xml" ); } public void testRenderToTxt() throws Exception { - StringWriter out = new StringWriter(); - Renderer renderer = new TxtRenderer( new PrintWriter( out ), Renderer.DEFAULT_ROLES ); - renderer.render( monitors ); - assertEqualsIgnoreLineEnds( expected( "txt" ), out.toString() ); + assertExpectedRendering( new TxtRenderer(), "txt" ); } - private void assertEqualsIgnoreLineEnds( String expected, String actual ) + public void testRenderToHtml() + throws Exception { - expected = StringUtils.remove( StringUtils.remove( expected, "\n" ), "\r" ); - actual = StringUtils.remove( StringUtils.remove( actual, "\n" ), "\r" ); - assertEquals( expected, actual ); + assertExpectedRendering( new HtmlRenderer(), "html" ); } - private String expected( String format ) - throws IOException + protected void assertExpectedRendering( Renderer renderer, String format ) + throws Exception { + StringWriter out = new StringWriter(); + renderer.render( new PrintWriter( out ), monitors ); + String actual = out.toString(); + actual = StringUtils.remove( StringUtils.remove( actual, "\n" ), "\r" ); + String expected = IOUtils.toString( getClass().getResourceAsStream( "RendererTest." + format ) ); expected = StringUtils.remove( StringUtils.remove( expected, '\n' ), '\r' ); - return expected; + + assertEquals( expected, actual ); } } Added: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/SelectorTest.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/SelectorTest.java?rev=633810&view=auto ============================================================================== --- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/SelectorTest.java (added) +++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/SelectorTest.java Wed Mar 5 02:48:38 2008 @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.monitoring.reporting; + +import java.util.Collection; + +import junit.framework.TestCase; + +import org.apache.commons.monitoring.Counter; +import org.apache.commons.monitoring.Monitor; +import org.apache.commons.monitoring.Repository; +import org.apache.commons.monitoring.impl.repositories.DefaultRepository; + +/** + * @author <a href="mailto:[EMAIL PROTECTED]">Nicolas De Loof</a> + */ +public class SelectorTest + extends TestCase +{ + public void testSinglePath() + throws Exception + { + Repository repository = new DefaultRepository(); + Selector selector = new Selector( "monitor/test/counter/performances" ); + + repository.getMonitor( "test" ).getCounter( Monitor.PERFORMANCES ).add( 1234 ); + + Object value = selector.select( repository ); + assertTrue( value instanceof Counter ); + Counter counter = (Counter) value; + assertEquals( 1234L, counter.get() ); + } + + public void testSinglePathGet() + throws Exception + { + Repository repository = new DefaultRepository(); + Selector selector = new Selector( "monitor/test/counter/performances/" ); + + repository.getMonitor( "test" ).getCounter( Monitor.PERFORMANCES ).add( 1234 ); + + Object value = selector.select( repository ); + assertEquals( "1234", value.toString() ); + } + + public void testMultiplePath() + { + Repository repository = new DefaultRepository(); + Selector selector = new Selector( "monitors/counter/performances/" ); + + repository.getMonitor( "one" ).getCounter( Monitor.PERFORMANCES ).add( 1234 ); + repository.getMonitor( "two" ).getCounter( Monitor.PERFORMANCES ).add( 5678 ); + + Object value = selector.select( repository ); + assertTrue( value instanceof Collection ); + Collection values = (Collection) value; + assertTrue( values.toString().contains( "1234" ) ); + assertTrue( values.toString().contains( "5678" ) ); + } +} Propchange: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/SelectorTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/SelectorTest.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/SelectorTest.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.html URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.html?rev=633810&view=auto ============================================================================== --- commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.html (added) +++ commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.html Wed Mar 5 02:48:38 2008 @@ -0,0 +1,24 @@ +<html><body> +<table> +<thead> +<tr><th rowspan='2'>name</th><th rowspan='2'>category</th> +<th rowspan='2'>subsystem</th><th colspan='5'>concurrency</th><th colspan='7'>performances</th></tr> +<tr> +<th>value</th><th>min</th><th>max</th><th>mean</th><th>dev.</th> +<th>value</th><th>min</th><th>max</th><th>mean</th><th>dev.</th><th>sum</th><th>hits</th> +</tr> +</thead> +<tbody> +<tr> +<td>JsonRendererTest.setUp</td><td>test</td><td>reporting</td> +<td title='concurrency'>0</td><td>0</td><td>0</td><td>NaN</td><td>NaN</td> +<td title='performances'>10</td><td>10</td><td>10</td><td>10.0</td><td>NaN</td><td>10</td><td>1</td> +</tr> + +<tr><td>TestCase</td><td>test</td><td>junit</td> +<td title='concurrency'>1</td><td>1</td><td>1</td><td>0.0</td><td>NaN</td> +<td title='performances'>0</td><td>0</td><td>0</td><td>NaN</td><td>NaN</td><td>0</td><td>0</td> +</tr> + +</tbody></table> +</body></html> \ No newline at end of file Propchange: commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.html ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.html ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.html ------------------------------------------------------------------------------ svn:mime-type = text/html Modified: commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.js URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.js?rev=633810&r1=633809&r2=633810&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.js (original) +++ commons/sandbox/monitoring/trunk/src/test/resources/org/apache/commons/monitoring/reporting/RendererTest.js Wed Mar 5 02:48:38 2008 @@ -1,7 +1,7 @@ -[{key:{name:"JsonRendererTest.setUp",category:"test",subsystem:"reporting"}, -concurrency:{value:"0",min:"0",max:"0",mean:"NaN",stdDev:"NaN"}, -performances:{value:"10",min:"10",max:"10",mean:"10.0",stdDev:"NaN",total:"10",hits:"1"}}, -{key:{name:"TestCase",category:"test",subsystem:"junit"}, -concurrency:{value:"1",min:"1",max:"1",mean:"0.0",stdDev:"NaN"}, -performances:{value:"0",min:"0",max:"0",mean:"NaN",stdDev:"NaN",total:"0",hits:"0"}} +[{concurrency:{value:"0",min:"0",max:"0",mean:"NaN",stdDev:"NaN"}, +performances:{value:"10",min:"10",max:"10",mean:"10.0",stdDev:"NaN",total:"10",hits:"1"}, +key:{name:"JsonRendererTest.setUp",category:"test",subsystem:"reporting"}}, +{concurrency:{value:"1",min:"1",max:"1",mean:"0.0",stdDev:"NaN"}, +performances:{value:"0",min:"0",max:"0",mean:"NaN",stdDev:"NaN",total:"0",hits:"0"}, +key:{name:"TestCase",category:"test",subsystem:"junit"}} ]