Added: commons/sandbox/monitoring/trunk/src/main/resources/META-INF/monitoring.tld URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/resources/META-INF/monitoring.tld?rev=653443&view=auto ============================================================================== --- commons/sandbox/monitoring/trunk/src/main/resources/META-INF/monitoring.tld (added) +++ commons/sandbox/monitoring/trunk/src/main/resources/META-INF/monitoring.tld Mon May 5 05:14:25 2008 @@ -0,0 +1,160 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" + "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> +<taglib> + <tlibversion>1.2</tlibversion> + <jspversion>1.1</jspversion> + <shortname>monitoring</shortname> + <uri>http://commons.apache.org/monitoring/tags</uri> + <tag> + <name>start</name> + <tagclass>org.apache.commons.monitoring.servlet.jsp.StartTag</tagclass> + <teiclass>org.apache.commons.monitoring.servlet.jsp.StartTagTei</teiclass> + <bodycontent>empty</bodycontent> + <attribute> + <name>id</name> + <required>true</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <name>scope</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <name>name</name> + <required>true</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <name>category</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <name>subsystem</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + </tag> + + <tag> + <name>stop</name> + <tagclass>org.apache.commons.monitoring.servlet.jsp.StopTag</tagclass> + <bodycontent>empty</bodycontent> + <attribute> + <name>id</name> + <required>true</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <name>scope</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + </tag> + + <tag> + <name>unit</name> + <tagclass>org.apache.commons.monitoring.servlet.jsp.UnitTag</tagclass> + <bodycontent>empty</bodycontent> + <attribute> + <name>unit</name> + <required>true</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <name>id</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <name>name</name> + <required>true</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + </tag> + + <tag> + <name>categories</name> + <tagclass>org.apache.commons.monitoring.servlet.jsp.CategoriesTag</tagclass> + <bodycontent>empty</bodycontent> + <attribute> + <name>id</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <name>name</name> + <required>true</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <name>repository</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + </tag> + + <tag> + <name>subsystems</name> + <tagclass>org.apache.commons.monitoring.servlet.jsp.SubsystemsTag</tagclass> + <bodycontent>empty</bodycontent> + <attribute> + <name>id</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <name>name</name> + <required>true</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <name>repository</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + </tag> + + <tag> + <name>statvalue</name> + <tagclass>org.apache.commons.monitoring.servlet.jsp.StatValueTag</tagclass> + <bodycontent>empty</bodycontent> + <attribute> + <name>role</name> + <required>true</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <name>name</name> + <required>true</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <name>repository</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + </tag> + +</taglib> + + +
Propchange: commons/sandbox/monitoring/trunk/src/main/resources/META-INF/monitoring.tld ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: commons/sandbox/monitoring/trunk/src/main/resources/META-INF/spring.handlers URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/resources/META-INF/spring.handlers?rev=653443&view=auto ============================================================================== --- commons/sandbox/monitoring/trunk/src/main/resources/META-INF/spring.handlers (added) +++ commons/sandbox/monitoring/trunk/src/main/resources/META-INF/spring.handlers Mon May 5 05:14:25 2008 @@ -0,0 +1,17 @@ +# +# 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. +# +http\://commons.apache.org/monitoring = org.apache.commons.monitoring.spring.MonitoringNamespaceHandler \ No newline at end of file Added: commons/sandbox/monitoring/trunk/src/main/resources/META-INF/spring.schemas URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/resources/META-INF/spring.schemas?rev=653443&view=auto ============================================================================== --- commons/sandbox/monitoring/trunk/src/main/resources/META-INF/spring.schemas (added) +++ commons/sandbox/monitoring/trunk/src/main/resources/META-INF/spring.schemas Mon May 5 05:14:25 2008 @@ -0,0 +1,17 @@ +# +# 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. +# +http\://commons.apache.org/monitoring = monitoring.xsd \ No newline at end of file Added: commons/sandbox/monitoring/trunk/src/main/resources/monitoring.xsd URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/resources/monitoring.xsd?rev=653443&view=auto ============================================================================== --- commons/sandbox/monitoring/trunk/src/main/resources/monitoring.xsd (added) +++ commons/sandbox/monitoring/trunk/src/main/resources/monitoring.xsd Mon May 5 05:14:25 2008 @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<xsd:schema + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:beans="http://www.springframework.org/schema/beans" + targetNamespace="http://commons.apache.org/monitoring" + elementFormDefault="qualified" attributeFormDefault="unqualified"> + + <xsd:import namespace="http://www.springframework.org/schema/beans"/> + <xsd:element name="auto-proxy"> + <xsd:complexType> + <xsd:attribute name="pattern" type="xsd:string" /> + <xsd:attribute name="expression" type="xsd:string" /> + <xsd:attribute name="name-generator" type="xsd:string" use="optional" /> + <xsd:attribute name="category" type="xsd:string" use="optional" /> + <xsd:attribute name="subsystem" type="xsd:string" use="optional" /> + </xsd:complexType> + </xsd:element> + +</xsd:schema> \ No newline at end of file Propchange: commons/sandbox/monitoring/trunk/src/main/resources/monitoring.xsd ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/sandbox/monitoring/trunk/src/main/resources/monitoring.xsd ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/sandbox/monitoring/trunk/src/main/resources/monitoring.xsd ------------------------------------------------------------------------------ svn:mime-type = text/xml 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=653443&r1=653442&r2=653443&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/site/xdoc/instrumentation.xml (original) +++ commons/sandbox/monitoring/trunk/src/site/xdoc/instrumentation.xml Mon May 5 05:14:25 2008 @@ -36,7 +36,9 @@ <subsection name="Monitors"> <p> The application exposes it's state based on <b>monitors</b>. A monitor is an abstraction for any - element in the application that can expose state or resource consumption. It is identified by : + element in the application that can expose state or resource consumption. This can be a code + fragment, a web application URI, a JDBC query, some business object data, etc. It is identified + by : <ul> <li>a <b>name</b> that is the human readable representation of the exposed state</li> <li>a <b>category</b> that matches technical layering of the application @@ -46,7 +48,6 @@ </ul> </p> <p> - Only the name is required, but category and subsystem is a nice way to group monitors by technical or functional criteria. </p> @@ -54,22 +55,24 @@ <subsection name="Repository"> <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.repositories.DefaultRepository</code> creates new - Monitor instance when a non-existing one is requested, so you don't have to worry about monitors management. + Key. The repository is used to retrieve existing monitors and create new ones. The + <a href="xref/org/apache/commons/monitoring/impl/repositories/DefaultRepository">default repository implementation</a> + creates new Monitor instance when a non-existing one is requested, so you don't have to wory + 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 + You can 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"> <p> - Monitors manage a set of <code>StatValues</code> that the application uses to expose state. + Monitors manage a set of <code>StatValues</code> that the application uses to expose state. The + monitor only identifies where the data comes from, and the statValues handle the monitored data. There is two types of values that application can use, depending on the data to be exposed : <ul> <li>a <b>Counter</b> is used to expose cumulative events. The value a counter maintains @@ -93,36 +96,53 @@ </p> <p> In both cases, the statValues compute statistical information from what the application exposes, like - min / max / mean and standardDeviation, that in many case is more informative than the current value. + min / max / mean and standard deviation, that in many case is more informative than the current value. + Available statistical indicators are limited as a StatValue does not maintain all the individual + elements as a serie but only aggregates, to avoid memory over-consumption. + </p> + <p>The <a href="xref/org/apache/commons/monitoring/impl/monitors/CreateValuesOnDemandMonitor"> + default monitor implementation</a> will create the required Gauge/Counters implementation when a + statValue is requested by the application. </p> + </subsection> + <subsection name="Role"> <p> - The statValues are identified in a monitor by a role. There is predefined roles for performances and - concurrency monitoring, and any other relevant counter/gauge can be registered to a monitor. The default - <code>org.apache.commons.monitoring.impl.CreateValuesOnDemandMonitor</code> monitor implementation will - create the required Gauge/Counters implementation when a statValue is requested by the application. + A monitor can handle many statValues. StatValues are identified in a monitor by a role, that + describes the data beeing computed. There is predefined roles for performances, concurrency + monitoring and failures count, but any other relevant counter/gauge can be registered to a monitor. <pre> - Monitor monitor = repository.getMonitor( "SoapEndpoint.process", "soap" ); + final static Role BYTES = new Role( "bytes", Unit.BYTES, Counter.class ); + + static Monitor monitor = repository.getMonitor( "SoapEndpoint.process" ); + static Counter bytes = monitor.getCounter( BYTES ); - // Process a SOAP message + public void process( SOAPMessage message ) + { + // Process a SOAP message - // retrieve the custom Counter for the "byte" role - monitor.getCounter( "bytes" ).add( SOAPMessage.getSize(), Unit.BYTES ); + // retrieve the custom Counter for the "byte" role + bytes.add( SOAPMessage.getSize(), Unit.BYTES ); + } </pre> + A role can be considered as a statValue prototype. It defines : + <ul> + <li>The name of the statValue inside the monitor</li> + <li>The unit used for data gathered by the statValue</li> + <li>The statValue type, beeing either <code>Counter.class</code> or <code>Gauge.class</code></li> + </ul> </p> </subsection> <subsection name="Units"> - <p>Counters and Gauge knows the data type they hold : when a first value is set/added to - a StatValue, it's internal Unit is set. Any other change/addition is checked for unit to - be compatible. "compatible" means the passed values can be converted to the same primary - unit. Units are defined using the <code>org.apache.commons.monitoring.Unit</code> class. - Any Unit has a primary unit, and the primary unit is its own primary. Two units are - compatible if they share the same primary unit. Units are for example <code>Unit.SECONDS</code> - that is compatible with <code>Unit.MILLIS</code> as they share the same primary unit - <code>Unit.NANOS</code>. + <p>Counters and Gauge knows the data type they hold, based on the Role used to create them : + Any data set/addition is checked for unit to be compatible. "compatible" means the passed values can be + converted to the same primary unit, "primary" beeing the finest unit available for a data type. + For example, <code>Unit.SECONDS</code>, is compatible with <code>Unit.MILLIS</code> + as they share the same primary unit <code>Unit.NANOS</code>. </p> <p> You can define your own units on the same basis, to ensure good usage of your monitors - and cleaner reporting. + and cleaner reporting. You can also pass data to a statValue with any compatible Unit, as + the statValue will internally handle any required conversion. </p> </subsection> <subsection name="StopWatches"> @@ -151,10 +171,11 @@ counters. First one only computes performance of the target code, not sub-processes. </p> <p> - The default StopWatch implementation (<code>org.apache.commons.monitoring.impl.DefaultStopWatch.java</code>) - can optionally maintain the List of StopWatches involved in the current thread processing via the - <code>ExecutionStack</code>. To enable this feature, invoke <code>DefaultStopWatch.setTraceExecution()</code> - at application startup. + The <a href="xref/org/apache/commons/monitoring/impl/stopwatches/DefaultStopWatch">default StopWatch implementation</a> + can be extended to support some custom features. <code>ExecutionStopWatch</code> for example adds support for + a list of all stopwatches beeing used in the current thread, so that you can trace the activity if you + detect bad performances of the global process. To use a custom StopWatch class, simply setup the + repository using <code>new DefaultRepository( MyCustomStopWatch.class )</code>. </p> </subsection> </section> 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=653443&r1=653442&r2=653443&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 Mon May 5 05:14:25 2008 @@ -91,6 +91,7 @@ { Options options = new OptionsSupport() { + @SuppressWarnings("unchecked") public Unit unitFor( Role role ) { return Unit.MICROS;