You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sirona.apache.org by ol...@apache.org on 2014/01/28 00:39:24 UTC
svn commit: r1561905 - in /incubator/sirona/trunk/agent/javaagent: ./
src/main/java/org/apache/sirona/javaagent/
src/main/java/org/apache/sirona/javaagent/listener/
src/test/java/org/apache/sirona/javaagent/
src/test/java/org/apache/test/sirona/javaagent/
Author: olamy
Date: Mon Jan 27 23:39:23 2014
New Revision: 1561905
URL: http://svn.apache.org/r1561905
Log:
[SIRONA-22] provide a parameter to disable default CounterListener in javaagent
Modified:
incubator/sirona/trunk/agent/javaagent/pom.xml
incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/AgentContext.java
incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java
incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/CounterListener.java
incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/javaagent/JavaAgentRunner.java
incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/SimpleTest.java
Modified: incubator/sirona/trunk/agent/javaagent/pom.xml
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/pom.xml?rev=1561905&r1=1561904&r2=1561905&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/pom.xml (original)
+++ incubator/sirona/trunk/agent/javaagent/pom.xml Mon Jan 27 23:39:23 2014
@@ -59,6 +59,14 @@
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
+
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ <version>3.2.1</version>
+ <scope>test</scope>
+ </dependency>
+
</dependencies>
<build>
Modified: incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/AgentContext.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/AgentContext.java?rev=1561905&r1=1561904&r2=1561905&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/AgentContext.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/AgentContext.java Mon Jan 27 23:39:23 2014
@@ -25,17 +25,38 @@ import org.apache.sirona.javaagent.spi.O
import org.apache.sirona.spi.SPI;
import java.lang.reflect.Method;
-import java.util.*;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
// just a helper to ease ASM work and reuse AbstractPerformanceInterceptor logic
public class AgentContext {
+
private static final InvocationListener[] EXISTING_LISTENERS = loadAllListeners();
private static final ConcurrentMap<String, InvocationListener[]> LISTENERS_BY_KEY = new ConcurrentHashMap<String, InvocationListener[]>();
private static final ConcurrentMap<String, Counter.Key> KEYS_CACHE = new ConcurrentHashMap<String, Counter.Key>();
+ private static Map<String, String> agentParameters = new HashMap<String, String>( );
+
+ public static void addAgentParameter( String key, String value){
+ agentParameters.put( key, value );
+ }
+
+ /**
+ *
+ * @return a copy of the Agent parameters
+ */
+ public static Map<String,String> getAgentParameters(){
+ return new HashMap<String, String>( agentParameters );
+ }
+
// called by agent
public static AgentContext startOn(final String key, final Object that) {
return new AgentContext(key, that, listeners(key));
@@ -106,7 +127,7 @@ public class AgentContext {
listeners.add(listener);
}
}
- Collections.sort(listeners, ListenerComparator.INSTANCE);
+ Collections.sort( listeners, ListenerComparator.INSTANCE );
return listeners.toArray(new InvocationListener[listeners.size()]);
}
@@ -185,7 +206,8 @@ public class AgentContext {
}
}
- private static class ListenerComparator implements Comparator<InvocationListener> {
+ private static class ListenerComparator implements Comparator<InvocationListener>
+ {
private static final ListenerComparator INSTANCE = new ListenerComparator();
private ListenerComparator() {
Modified: incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java?rev=1561905&r1=1561904&r2=1561905&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java Mon Jan 27 23:39:23 2014
@@ -21,7 +21,11 @@ import java.io.File;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.instrument.Instrumentation;
+import java.lang.reflect.Method;
import java.net.URL;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
import java.util.jar.JarFile;
public class SironaAgent {
@@ -72,6 +76,20 @@ public class SironaAgent {
}
try {
+ // setup agent parameters
+ Class<?> clazz = Class.forName("org.apache.sirona.javaagent.AgentContext", true, loader);
+ Method addAgentParameterMethod = clazz.getMethod( "addAgentParameter", new Class[]{ String.class, String.class } );
+ Map<String,String> agentParameters=extractParameters( agentArgs );
+ for (Map.Entry<String,String> entry : agentParameters.entrySet() ){
+ addAgentParameterMethod.invoke( null, new String[]{entry.getKey(), entry.getValue() == null ? "" : entry.getValue()} );
+
+ }
+ } catch ( final Exception e ) {
+ e.printStackTrace();
+ }
+
+
+ try {
final SironaTransformer transformer = SironaTransformer.class.cast(loader.loadClass("org.apache.sirona.javaagent.SironaTransformer").newInstance());
instrumentation.addTransformer(transformer, instrumentation.isRetransformClassesSupported());
@@ -149,4 +167,32 @@ public class SironaAgent {
}
return null;
}
+
+ /**
+ *
+ * @param agentArgs foo=bar|beer=palepale|etc...
+ * @return
+ */
+ protected static Map<String, String> extractParameters(String agentArgs){
+ if(agentArgs==null||agentArgs.length()<1){
+ return Collections.emptyMap();
+ }
+
+ String[] separatorSplitted = agentArgs.split( "\\|" );
+
+ Map<String,String> params = new HashMap<String, String>( separatorSplitted.length / 2 );
+
+ for (final String agentArg:separatorSplitted){
+ int idx = agentArg.indexOf( '=' );
+ if (idx>=0){
+ String key = agentArg.substring( 0, idx);
+ String value = agentArg.substring(idx+1, agentArg.length());
+ params.put( key, value);
+ } else {
+ params.put( agentArg, "" );
+ }
+ }
+
+ return params;
+ }
}
Modified: incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/CounterListener.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/CounterListener.java?rev=1561905&r1=1561904&r2=1561905&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/CounterListener.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/listener/CounterListener.java Mon Jan 27 23:39:23 2014
@@ -27,6 +27,9 @@ import org.apache.sirona.javaagent.spi.O
@Order(0)
@AutoSet
public class CounterListener extends AbstractPerformanceInterceptor<String> implements InvocationListener {
+
+ public static final String DISABLE_PARAMETER_KEY = "disable-counter-listener";
+
private static final int KEY = 0;
private PredicateEvaluator includes = new PredicateEvaluator("true:true", ",");
@@ -34,7 +37,8 @@ public class CounterListener extends Abs
@Override
public boolean accept(final String key) {
- return includes.matches(key) && !excludes.matches(key);
+ return !AgentContext.getAgentParameters().containsKey( DISABLE_PARAMETER_KEY ) //
+ && includes.matches(key) && !excludes.matches(key);
}
// @AutoSet
Modified: incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/javaagent/JavaAgentRunner.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/javaagent/JavaAgentRunner.java?rev=1561905&r1=1561904&r2=1561905&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/javaagent/JavaAgentRunner.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/javaagent/JavaAgentRunner.java Mon Jan 27 23:39:23 2014
@@ -16,6 +16,7 @@
*/
package org.apache.sirona.javaagent;
+import org.apache.commons.lang3.text.StrSubstitutor;
import org.junit.internal.TextListener;
import org.junit.runner.Description;
import org.junit.runner.JUnitCore;
@@ -118,12 +119,39 @@ public class JavaAgentRunner extends Blo
private static String[] buildProcessArgs(final FrameworkMethod mtd) throws IOException {
final Collection<String> args = new ArrayList<String>();
- args.add(findJava());
- args.add("-javaagent:" + buildJavaagent());
- if (Boolean.getBoolean("test.debug.remote")) {
- args.add("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=" + Integer.getInteger("test.debug.remote.port", 5005));
+
+ args.add( findJava() );
+
+ AgentArgs agentArgs = mtd.getAnnotation( AgentArgs.class );
+
+ String maxMem = agentArgs == null ? "" : agentArgs.maxMem();
+
+ if ( maxMem.length() > 1 )
+ {
+ args.add( "-Xmx" + maxMem );
+ }
+
+ String minMem = agentArgs == null ? "" : agentArgs.minMem();
+
+ if ( minMem.length() > 1 )
+ {
+ args.add( "-Xms" + minMem );
+ }
+
+ String javaAgentArgs =
+ agentArgs == null ? null : StrSubstitutor.replace( agentArgs.value(), System.getProperties() );
+ args.add( "-javaagent:" + buildJavaagent() + "=" + ( javaAgentArgs == null ? "" : javaAgentArgs ) );
+
+ if ( Boolean.getBoolean( "test.debug.remote" ) )
+ {
+ args.add( "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=" + Integer.getInteger(
+ "test.debug.remote.port", 8080 ) );
+ }
+ if ( agentArgs != null && agentArgs.noVerify() )
+ {
+ args.add( "-noverify" );
}
- args.add("-cp");
+ args.add( "-cp" );
args.add(removeAgentFromCp(System.getProperty("surefire.test.class.path", System.getProperty("java.class.path"))));
args.add(JavaAgentRunner.class.getName());
args.add(mtd.getMethod().getDeclaringClass().getName());
Modified: incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/SimpleTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/SimpleTest.java?rev=1561905&r1=1561904&r2=1561905&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/SimpleTest.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/SimpleTest.java Mon Jan 27 23:39:23 2014
@@ -18,7 +18,9 @@ package org.apache.test.sirona.javaagent
import org.apache.sirona.Role;
import org.apache.sirona.counters.Counter;
+import org.apache.sirona.javaagent.AgentArgs;
import org.apache.sirona.javaagent.JavaAgentRunner;
+import org.apache.sirona.javaagent.listener.CounterListener;
import org.apache.sirona.repositories.Repository;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -99,6 +101,14 @@ public class SimpleTest {
assertHits("org.apache.test.sirona.javaagent.SimpleTest$ServiceTransform.soPrimitive", 1);
}
+ @Test
+ @AgentArgs( value = CounterListener.DISABLE_PARAMETER_KEY)
+ public void primitiveDisable() {
+ assertHits("org.apache.test.sirona.javaagent.SimpleTest$ServiceTransform.soPrimitive", 0);
+ new ServiceTransform().soPrimitive();
+ assertHits("org.apache.test.sirona.javaagent.SimpleTest$ServiceTransform.soPrimitive", 0);
+ }
+
private static void assertException(final int count, final Class<?> exception) {
int iae = 0;
for (final Counter c : Repository.INSTANCE.counters()) {