You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ni...@apache.org on 2008/03/07 09:22:33 UTC
svn commit: r634580 - in /commons/sandbox/monitoring/trunk/src:
main/java/org/apache/commons/monitoring/
main/java/org/apache/commons/monitoring/impl/repositories/
main/java/org/apache/commons/monitoring/reporting/
test/java/org/apache/commons/monitori...
Author: nicolas
Date: Fri Mar 7 00:22:14 2008
New Revision: 634580
URL: http://svn.apache.org/viewvc?rev=634580&view=rev
Log:
fix Selector not being determinist when multiple get methods with various args
fix monitor.Key constructor to avoid nulls
add convenience Monitoring.start( Monitor )
Modified:
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitor.java
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitoring.java
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/repositories/AbstractRepository.java
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Selector.java
commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/SelectorPeriodicLogger.java
commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/SelectorTest.java
Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitor.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitor.java?rev=634580&r1=634579&r2=634580&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitor.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitor.java Fri Mar 7 00:22:14 2008
@@ -110,6 +110,8 @@
*/
public static class Key
{
+ public final static String DEFAULT = "";
+
private final String name;
private final String category;
@@ -119,9 +121,13 @@
public Key( String name, String category, String subsystem )
{
super();
+ if (name == null)
+ {
+ throw new IllegalArgumentException( "A name must be provided" );
+ }
this.name = name;
- this.category = category;
- this.subsystem = subsystem;
+ this.category = category != null ? category : DEFAULT;
+ this.subsystem = subsystem != null ? subsystem : DEFAULT;;
}
@Override
Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitoring.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitoring.java?rev=634580&r1=634579&r2=634580&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitoring.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/Monitoring.java Fri Mar 7 00:22:14 2008
@@ -17,6 +17,7 @@
package org.apache.commons.monitoring;
+import org.apache.commons.monitoring.Monitor.Key;
import org.apache.commons.monitoring.impl.repositories.DefaultRepository;
/**
@@ -45,22 +46,27 @@
public static Monitor getMonitor( String name )
{
- return getMonitor( name, null, null );
+ return getMonitor( name, Key.DEFAULT, Key.DEFAULT );
}
public static StopWatch start( String name )
{
- return start( name, null, null );
+ return start( name, Key.DEFAULT, Key.DEFAULT );
}
public static StopWatch start( String name, String category )
{
- return start( name, category, null );
+ return start( name, category, Key.DEFAULT );
}
public static StopWatch start( String name, String category, String subsystem )
{
- return repository.start( getMonitor( name, category, subsystem ) );
+ return start( getMonitor( name, category, subsystem ) );
+ }
+
+ public static StopWatch start( Monitor monitor )
+ {
+ return repository.start( monitor );
}
public static void setRepository( Repository repository )
Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/repositories/AbstractRepository.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/repositories/AbstractRepository.java?rev=634580&r1=634579&r2=634580&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/repositories/AbstractRepository.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/impl/repositories/AbstractRepository.java Fri Mar 7 00:22:14 2008
@@ -49,12 +49,12 @@
public Monitor getMonitor( String name )
{
- return getMonitor( name, null, null );
+ return getMonitor( name, Key.DEFAULT, Key.DEFAULT );
}
public Monitor getMonitor( String name, String category )
{
- return getMonitor( name, category, null );
+ return getMonitor( name, category, Key.DEFAULT );
}
public Monitor getMonitor( String name, String category, String subsystem )
Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Selector.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Selector.java?rev=634580&r1=634579&r2=634580&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Selector.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/Selector.java Fri Mar 7 00:22:14 2008
@@ -35,10 +35,15 @@
public class Selector
{
+ /**
+ *
+ */
+ private static final String SEP = "/";
private String path;
/**
* Constructor
+ *
* @param path
*/
public Selector( String path )
@@ -53,12 +58,25 @@
public Object select( Object resource )
{
Stack<String> stack = new Stack<String>();
- StringTokenizer tokenizer = new StringTokenizer( path, "/" );
- while ( tokenizer.hasMoreTokens() )
+ StringTokenizer tokenizer = new StringTokenizer( path, SEP, true );
+ String previous = null;
+ while( tokenizer.hasMoreTokens() )
{
- stack.push( tokenizer.nextToken() );
+ String next = tokenizer.nextToken();
+ if ( SEP.equals( next ) )
+ {
+ if ( SEP.equals( previous ) )
+ {
+ stack.push( "" );
+ }
+ }
+ else
+ {
+ stack.push( next );
+ }
+ previous = next;
}
- if ( path.endsWith( "/" ) )
+ if ( path.endsWith( SEP ) )
{
stack.push( "" );
}
@@ -67,7 +85,7 @@
return select( resource, stack );
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
protected Object select( Object resource, Stack<String> path )
throws IllegalArgumentException
{
@@ -92,7 +110,7 @@
throw new IllegalArgumentException( "Failed to invoke " + accessor );
}
- if ( resource instanceof Collection && ! path.isEmpty() )
+ if ( resource instanceof Collection && !path.isEmpty() )
{
Collection input = (Collection) resource;
Collection result = new ArrayList( input.size() );
@@ -115,13 +133,15 @@
}
/**
- * Retrieve a getter method that only requires String parameters
+ * Retrieve a getter method that only requires String parameters. When multiple methods
+ * match, the on with the most parameters is returned, for example
+ * getMonitor( String, String, String ) in preference to getMonitor( String )
*
* @param resource
* @param name
* @return
*/
- @SuppressWarnings("unchecked")
+ @SuppressWarnings( "unchecked" )
protected Method getAccessor( Object resource, String name )
{
String accessor = "get";
@@ -130,6 +150,7 @@
accessor += Character.toUpperCase( name.charAt( 0 ) ) + name.substring( 1 );
}
Method[] methods = resource.getClass().getMethods();
+ Method bestMatch = null;
for ( int i = 0; i < methods.length; i++ )
{
Method method = methods[i];
@@ -147,10 +168,17 @@
}
if ( stringsOnly )
{
- return method;
+ if ( bestMatch == null || bestMatch.getParameterTypes().length < method.getParameterTypes().length )
+ {
+ bestMatch = method;
+ }
}
}
}
- throw new IllegalArgumentException( "No accessor for " + name + " on resource " + resource );
+ if ( bestMatch == null )
+ {
+ throw new IllegalArgumentException( "No accessor for " + name + " on resource " + resource );
+ }
+ return bestMatch;
}
}
Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/SelectorPeriodicLogger.java
URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/SelectorPeriodicLogger.java?rev=634580&r1=634579&r2=634580&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/SelectorPeriodicLogger.java (original)
+++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/SelectorPeriodicLogger.java Fri Mar 7 00:22:14 2008
@@ -18,6 +18,8 @@
package org.apache.commons.monitoring.reporting;
import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
import org.apache.commons.monitoring.Repository;
@@ -40,17 +42,28 @@
* @param repository the target monitoring repository
* @param output the output file
*/
- public SelectorPeriodicLogger( long period, Repository.Observable repository, String[] selectors )
+ public SelectorPeriodicLogger( long period, Repository.Observable repository, List<String> selectors )
{
super( period, repository );
- this.selectors = new Selector[selectors.length];
- for ( int i = 0; i < selectors.length; i++ )
+ this.selectors = new Selector[selectors.size()];
+ int i = 0;
+ for ( String path : selectors )
{
- this.selectors[i] = new Selector( selectors[i] );
+ this.selectors[i++] = new Selector( path );
}
}
/**
+ * @param period the period (in ms) to log the monitoring state
+ * @param repository the target monitoring repository
+ * @param output the output file
+ */
+ public SelectorPeriodicLogger( long period, Repository.Observable repository, String[] selectors )
+ {
+ this( period, repository, Arrays.asList( selectors ) );
+ }
+
+ /**
* Log the data from the (secondary) repository generated during the period
*
* @param period secondary repository that observed the monitored state
@@ -60,7 +73,7 @@
protected final void log( Repository period )
throws IOException
{
- Object[] values = new Object[ selectors.length ];
+ Object[] values = new Object[selectors.length];
for ( int i = 0; i < selectors.length; i++ )
{
values[i] = selectors[i].select( period );
Modified: 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=634580&r1=634579&r2=634580&view=diff
==============================================================================
--- commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/SelectorTest.java (original)
+++ commons/sandbox/monitoring/trunk/src/test/java/org/apache/commons/monitoring/reporting/SelectorTest.java Fri Mar 7 00:22:14 2008
@@ -37,7 +37,7 @@
throws Exception
{
Repository repository = new DefaultRepository();
- Selector selector = new Selector( "monitor/test/counter/performances" );
+ Selector selector = new Selector( "monitor/test///counter/performances" );
repository.getMonitor( "test" ).getCounter( Monitor.PERFORMANCES ).add( 1234, Unit.NANOS );
@@ -66,7 +66,7 @@
throws Exception
{
Repository repository = new DefaultRepository();
- Selector selector = new Selector( "monitor/test/counter/performances/" );
+ Selector selector = new Selector( "monitor/test///counter/performances/" );
repository.getMonitor( "test" ).getCounter( Monitor.PERFORMANCES ).add( 1234, Unit.NANOS );