19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package jdk.jfr.jmx; 27 28 import java.io.BufferedOutputStream; 29 import java.io.File; 30 import java.io.FileOutputStream; 31 import java.io.IOException; 32 import java.lang.management.ManagementFactory; 33 import java.time.Instant; 34 import java.util.ArrayList; 35 import java.util.HashMap; 36 import java.util.List; 37 import java.util.Map; 38 39 import jdk.jfr.EventType; 40 import jdk.jfr.FlightRecorder; 41 import jdk.jfr.Recording; 42 import jdk.jfr.RecordingState; 43 import jdk.jfr.SettingDescriptor; 44 import jdk.jfr.consumer.RecordedEvent; 45 import jdk.jfr.consumer.RecordingFile; 46 import jdk.management.jfr.EventTypeInfo; 47 import jdk.management.jfr.FlightRecorderMXBean; 48 import jdk.management.jfr.RecordingInfo; 49 import jdk.management.jfr.SettingDescriptorInfo; 50 import jdk.test.lib.Asserts; 51 import jdk.test.lib.Utils; 52 import jdk.test.lib.jfr.CommonHelper; 53 import jdk.test.lib.jfr.Events; 54 55 public class JmxHelper { 56 57 public static RecordingInfo getJmxRecording(long recId) { 58 for (RecordingInfo r : getFlighteRecorderMXBean().getRecordings()) { 59 if (r.getId() == recId) { 60 return r; 61 } 62 } 63 Asserts.fail("No RecordingInfo with id " + recId); 64 return null; 65 } 66 67 public static Recording getJavaRecording(long recId) { 68 for (Recording r : FlightRecorder.getFlightRecorder().getRecordings()) { 69 if (r.getId() == recId) { 70 return r; 71 } 72 } 73 Asserts.fail("No Recording with id " + recId); 74 return null; 75 } 262 System.out.println("==============="); 263 for (SettingDescriptor v : javaType.getSettingDescriptors()) { 264 System.out.println(" - " + v.getName()); 265 } 266 System.out.println(); 267 System.out.println(jmxType.getName() + " JMX API"); 268 System.out.println("==============="); 269 for (SettingDescriptorInfo v : jmxType.getSettingDescriptors()) { 270 System.out.println(" - " + v.getName()); 271 } 272 273 Asserts.fail("Missing setting"); 274 } 275 } 276 277 278 public static FlightRecorderMXBean getFlighteRecorderMXBean() { 279 return ManagementFactory.getPlatformMXBean(FlightRecorderMXBean.class); 280 } 281 282 } | 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package jdk.jfr.jmx; 27 28 import java.io.BufferedOutputStream; 29 import java.io.File; 30 import java.io.FileOutputStream; 31 import java.io.IOException; 32 import java.lang.management.ManagementFactory; 33 import java.time.Instant; 34 import java.util.ArrayList; 35 import java.util.HashMap; 36 import java.util.List; 37 import java.util.Map; 38 39 import com.sun.tools.attach.VirtualMachine; 40 import jdk.jfr.EventType; 41 import jdk.jfr.FlightRecorder; 42 import jdk.jfr.Recording; 43 import jdk.jfr.RecordingState; 44 import jdk.jfr.SettingDescriptor; 45 import jdk.jfr.consumer.RecordedEvent; 46 import jdk.jfr.consumer.RecordingFile; 47 import jdk.management.jfr.EventTypeInfo; 48 import jdk.management.jfr.FlightRecorderMXBean; 49 import jdk.management.jfr.RecordingInfo; 50 import jdk.management.jfr.SettingDescriptorInfo; 51 import jdk.test.lib.Asserts; 52 import jdk.test.lib.Utils; 53 import jdk.test.lib.jfr.CommonHelper; 54 import jdk.test.lib.jfr.Events; 55 56 import javax.management.JMX; 57 import javax.management.MBeanServerConnection; 58 import javax.management.ObjectName; 59 import javax.management.remote.JMXConnector; 60 import javax.management.remote.JMXConnectorFactory; 61 import javax.management.remote.JMXServiceURL; 62 63 public class JmxHelper { 64 private static final String LOCAL_CONNECTION_ADDRESS = "com.sun.management.jmxremote.localConnectorAddress"; 65 66 public static RecordingInfo getJmxRecording(long recId) { 67 for (RecordingInfo r : getFlighteRecorderMXBean().getRecordings()) { 68 if (r.getId() == recId) { 69 return r; 70 } 71 } 72 Asserts.fail("No RecordingInfo with id " + recId); 73 return null; 74 } 75 76 public static Recording getJavaRecording(long recId) { 77 for (Recording r : FlightRecorder.getFlightRecorder().getRecordings()) { 78 if (r.getId() == recId) { 79 return r; 80 } 81 } 82 Asserts.fail("No Recording with id " + recId); 83 return null; 84 } 271 System.out.println("==============="); 272 for (SettingDescriptor v : javaType.getSettingDescriptors()) { 273 System.out.println(" - " + v.getName()); 274 } 275 System.out.println(); 276 System.out.println(jmxType.getName() + " JMX API"); 277 System.out.println("==============="); 278 for (SettingDescriptorInfo v : jmxType.getSettingDescriptors()) { 279 System.out.println(" - " + v.getName()); 280 } 281 282 Asserts.fail("Missing setting"); 283 } 284 } 285 286 287 public static FlightRecorderMXBean getFlighteRecorderMXBean() { 288 return ManagementFactory.getPlatformMXBean(FlightRecorderMXBean.class); 289 } 290 291 public static long getPID(){ 292 return ManagementFactory.getRuntimeMXBean().getPid(); 293 } 294 295 public static FlightRecorderMXBean getFlighteRecorderMXBean(long pid) throws Exception { 296 VirtualMachine targetVM = VirtualMachine.attach("" + pid); 297 String jmxServiceUrl = targetVM.getAgentProperties().getProperty(LOCAL_CONNECTION_ADDRESS); 298 JMXServiceURL jmxURL = new JMXServiceURL(jmxServiceUrl); 299 JMXConnector connector = JMXConnectorFactory.connect(jmxURL); 300 MBeanServerConnection connection = connector.getMBeanServerConnection(); 301 302 ObjectName objectName = new ObjectName("jdk.management.jfr:type=FlightRecorder"); 303 return JMX.newMXBeanProxy(connection, objectName, FlightRecorderMXBean.class); 304 } 305 } |