package org.gridkit.jvmtool.bstub;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import org.gridkit.jvmtool.cli.CommandLauncher;
import org.gridkit.lab.jvm.perfdata.JStatData;
import org.gridkit.lab.jvm.perfdata.JStatData.Counter;
import org.gridkit.lab.jvm.perfdata.JStatData.StringCounter;
import com.beust.jcommander.Parameter;
import com.beust.jcommander.Parameters;
import com.beust.jcommander.ParametersDelegate;
import net.java.btrace.client.Client;
@Parameters(commandDescription = "Stub probe to target process")
public class StubCommand implements Runnable {
@ParametersDelegate
private final CommandLauncher host;
@ParametersDelegate
private BTraceClientConnection bconn;
@Parameter(names = {"-s", "--script"}, description = "Script class file", required = true)
private String script;
@Parameter(names = {"-a", "--args"}, variableArity = true, description = "Script arguments", required = false)
private String[] args;
public StubCommand(CommandLauncher host) {
this.host = host;
this.bconn = new BTraceClientConnection(host);
}
@Override
public void run() {
try {
int pid = bconn.getPID();
System.out.println("Target JVM " + pid);
try {
Map<String, Counter<?>> data = JStatData.connect(pid).getAllCounters();
String vm_name = ((StringCounter)data.get("java.property.java.vm.name")).getString();
String vm_java_version = ((StringCounter)data.get("java.property.java.version")).getString();
String vm_info = ((StringCounter)data.get("java.property.java.vm.info")).getString();
String vm_version = ((StringCounter)data.get("java.property.java.vm.version")).getString();
System.out.println(vm_name);
System.out.println(vm_java_version + " " + vm_info + " " + vm_version);
}
catch(Exception e) {
System.out.println("JVM info is not available (" + e.toString() + ")");
}
File f = new File(script);
if (!f.isFile()) {
host.fail("No such file [" + f.getCanonicalPath() + "]");
}
Client client = bconn.connect();
byte[] data = StreamHelper.readFile(f);
client.submit(f.getName(), data, args);
System.out.println("Press any key to exit");
System.in.read();
} catch (IOException e) {
host.fail("", e);
}
}
}