SIRONA-64 dump on exit flag for javaagent + fixing tests on java 8
git-svn-id: https://svn.apache.org/repos/asf/incubator/sirona/trunk@1766254 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java b/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java
index 58ff0b9..c908f0c 100644
--- a/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java
+++ b/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java
@@ -16,10 +16,14 @@
*/
package org.apache.sirona.javaagent;
+import org.apache.sirona.counters.Counter;
+import org.apache.sirona.repositories.Repository;
import org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement;
import java.io.ByteArrayOutputStream;
import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
import java.lang.instrument.Instrumentation;
import java.lang.reflect.Method;
import java.net.URL;
@@ -27,7 +31,6 @@
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
-import java.util.Timer;
import java.util.jar.JarFile;
import static java.util.Arrays.asList;
@@ -45,10 +48,9 @@
public static void agentmain(final String agentArgs, final Instrumentation instrumentation) {
// just to get information on weird issues :-)
- Thread.currentThread().setUncaughtExceptionHandler( new Thread.UncaughtExceptionHandler(){
+ Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
- public void uncaughtException( Thread thread, Throwable throwable )
- {
+ public void uncaughtException(Thread thread, Throwable throwable) {
System.out.println("uncaughtException for thread: " + thread.getName() + ", message:" + throwable.getMessage());
throwable.printStackTrace();
@@ -76,6 +78,37 @@
final boolean autoEvictClassLoaders = "true".equalsIgnoreCase(extractConfig(agentArgs, "autoEvictClassLoaders="));
final String tempClassLoaders = extractConfig(agentArgs, "tempClassLoaders=");
final boolean envrtDebug = debug || "true".equalsIgnoreCase(extractConfig(agentArgs, "environment-debug="));
+ final String dumpOnExit = extractConfig(agentArgs, "dumpOnExit=");
+ if (dumpOnExit != null) {
+ Runtime.getRuntime().addShutdownHook(new Thread() {
+ {
+ setName("sirona-dump-on-exit");
+ }
+
+ @Override
+ public void run() {
+ FileWriter writer = null;
+ try {
+ writer = new FileWriter(dumpOnExit);
+ writer.write("name;role;unit;average;min;max;hits;max concurrency");
+ for (final Counter c : Repository.INSTANCE.counters()) {
+ writer.write(c.getKey().getName() + ";" + c.getKey().getRole().getName() + ";" + c.getKey().getRole().getUnit().getName()
+ + ";" + c.getMean() + ";" + c.getMin() + ";" + c.getMax() + ";" + c.getHits() + ";" + c.getMaxConcurrency());
+ }
+ } catch (final IOException e) {
+ throw new IllegalStateException(e);
+ } finally {
+ if (writer != null) {
+ try {
+ writer.close();
+ } catch (final IOException e) {
+ // no-op
+ }
+ }
+ }
+ }
+ });
+ }
final StringBuilder out = new StringBuilder();
final String libs = extractConfig(agentArgs, "libs=");
@@ -110,13 +143,13 @@
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()} );
+ 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 ) {
+ } catch (final Exception e) {
e.printStackTrace();
}
@@ -164,7 +197,7 @@
&& instrumentation.isModifiableClass(clazz)) {
try {
- debug( loader, "reload clazz: {0}", clazz.getName() );
+ debug(loader, "reload clazz: {0}", clazz.getName());
instrumentation.retransformClasses(clazz);
} catch (final Exception e) {
@@ -176,13 +209,13 @@
}
}
} else {
- if (isDebug(loader)){
+ if (isDebug(loader)) {
System.out.println("do not reload classes");
}
}
} catch (final Exception e) {
if (isDebug(loader)) {
- System.out.println( "finished instrumentation setup with exception:" + e.getMessage() );
+ System.out.println("finished instrumentation setup with exception:" + e.getMessage());
}
e.printStackTrace();
}
@@ -203,30 +236,24 @@
}
private static void debug(ClassLoader loader, String msg, Object... objects) {
- try
- {
- Method method =loader //
- .loadClass( "org.apache.sirona.javaagent.logging.SironaAgentLogging") //
- .getMethod( "debug", String.class, Object.class );
+ try {
+ Method method = loader //
+ .loadClass("org.apache.sirona.javaagent.logging.SironaAgentLogging") //
+ .getMethod("debug", String.class, Object.class);
- method.invoke( null, msg, objects );
- }
- catch ( Exception e )
- {
+ method.invoke(null, msg, objects);
+ } catch (Exception e) {
e.printStackTrace();
}
}
- private static boolean isDebug( ClassLoader loader ) {
- try
- {
+ private static boolean isDebug(ClassLoader loader) {
+ try {
return Boolean.class.cast(
- loader.loadClass( "org.apache.sirona.javaagent.logging.SironaAgentLogging") //
- .getField( "AGENT_DEBUG" ) //
- .get( null ) );
- }
- catch ( Exception e )
- {
+ loader.loadClass("org.apache.sirona.javaagent.logging.SironaAgentLogging") //
+ .getField("AGENT_DEBUG") //
+ .get(null));
+ } catch (Exception e) {
e.printStackTrace();
}
return false;
@@ -244,7 +271,7 @@
final StringBuilder result = new StringBuilder(fileName.length());
final ByteArrayOutputStream out = new ByteArrayOutputStream();
- for (int i = 0; i < fileName.length();) {
+ for (int i = 0; i < fileName.length(); ) {
final char c = fileName.charAt(i);
if (c == '%') {
out.reset();
@@ -287,27 +314,26 @@
}
/**
- *
* @param agentArgs foo=bar|beer=palepale|etc...
* @return parameters
*/
- protected static Map<String, String> extractParameters(String agentArgs){
- if(agentArgs==null||agentArgs.length()<1){
+ protected static Map<String, String> extractParameters(String agentArgs) {
+ if (agentArgs == null || agentArgs.length() < 1) {
return Collections.emptyMap();
}
- String[] separatorSplitted = agentArgs.split( "\\|" );
+ String[] separatorSplitted = agentArgs.split("\\|");
- Map<String,String> params = new HashMap<String, String>( separatorSplitted.length / 2 );
+ 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);
+ 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, "" );
+ params.put(agentArg, "");
}
}
diff --git a/agent/javaagent/src/test/java/org/apache/sirona/javaagent/JavaAgentRunner.java b/agent/javaagent/src/test/java/org/apache/sirona/javaagent/JavaAgentRunner.java
index eb4d088..1e2e554 100644
--- a/agent/javaagent/src/test/java/org/apache/sirona/javaagent/JavaAgentRunner.java
+++ b/agent/javaagent/src/test/java/org/apache/sirona/javaagent/JavaAgentRunner.java
@@ -184,7 +184,7 @@
String key = prop[0];
String value = "";
if (prop.length > 1) {
- value = prop[1];
+ value = prop[1].replace("${project.build.directory}", new File("target").getAbsolutePath());
}
args.add("-D" + key + "=" + StrSubstitutor.replace(value, System.getProperties()));
}
diff --git a/agent/javaagent/src/test/java/org/apache/sirona/javaagent/listener/PathTrackingInvocationRecursiveTest.java b/agent/javaagent/src/test/java/org/apache/sirona/javaagent/listener/PathTrackingInvocationRecursiveTest.java
index 7bc0cec..ac6067e 100644
--- a/agent/javaagent/src/test/java/org/apache/sirona/javaagent/listener/PathTrackingInvocationRecursiveTest.java
+++ b/agent/javaagent/src/test/java/org/apache/sirona/javaagent/listener/PathTrackingInvocationRecursiveTest.java
@@ -68,7 +68,7 @@
Assert.assertTrue( !all.isEmpty() );
- Assert.assertEquals( 2, all.size() );
+ Assert.assertEquals(2, all.size() );
}
diff --git a/agent/javaagent/src/test/resources/pathtracking/sirona.properties b/agent/javaagent/src/test/resources/pathtracking/sirona.properties
index 0c37694..8c28e33 100644
--- a/agent/javaagent/src/test/resources/pathtracking/sirona.properties
+++ b/agent/javaagent/src/test/resources/pathtracking/sirona.properties
@@ -15,9 +15,7 @@
# specific language governing permissions and limitations
# under the License.
excludes = \
- prefix:java,\
- prefix:sun,\
- prefix:com,\
+ container:jvm,\
regex:org.apache.test.*Test\\..*,\
prefix:org.junit,\
prefix:junit, \