package hudson.remoting; import hudson.remoting.RemoteInvocationHandler.RPCRequest; import java.io.File; import java.io.FileInputStream; import java.io.DataInputStream; import java.io.ObjectInputStream; /** * A little forensic analysis tool to figure out what information master and slaves are exchanging. * * <p> * Use the tee command or network packet capturing tool to capture the traffic between the master and * the slave, then run it through this tool to get the dump of what commands are sent between them. * * @author Kohsuke Kawaguchi */ public class TrafficAnalyzer { public static void main(String[] args) throws Exception { File f = new File("/home/kohsuke/ws/hudson/investigations/javafx-windows-hang/out.log"); DataInputStream fin = new DataInputStream(new FileInputStream(f)); fin.readFully(new byte[4]); // skip preamble ObjectInputStream ois = new ObjectInputStream(fin); for (int n=0; ; n++) { Command o = (Command)ois.readObject(); System.out.println("#"+n+" : "+o); if (o instanceof RPCRequest) { RPCRequest request = (RPCRequest) o; System.out.print(" ("); boolean first=true; for (Object argument : request.getArguments()) { if(first) first=false; else System.out.print(","); System.out.print(argument); } System.out.println(")"); } if (o.createdAt!=null) o.createdAt.printStackTrace(System.out); } } }