diff --git a/tlatools/src/tlc2/tool/management/StateMonitor.java b/tlatools/src/tlc2/tool/management/StateMonitor.java deleted file mode 100644 index 90eb4cd236e827ff46826b1354e739cce54927c1..0000000000000000000000000000000000000000 --- a/tlatools/src/tlc2/tool/management/StateMonitor.java +++ /dev/null @@ -1,138 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2018 Microsoft Research. All rights reserved. - * - * The MIT License (MIT) - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is furnished to do - * so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN - * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * Contributors: - * Markus Alexander Kuppe - initial API and implementation - ******************************************************************************/ -package tlc2.tool.management; - -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.Comparator; -import java.util.Date; -import java.util.List; -import java.util.Scanner; - -import javax.management.MBeanServerConnection; -import javax.management.MBeanServerInvocationHandler; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectName; -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXServiceURL; - -import com.sun.tools.attach.AttachNotSupportedException; -import com.sun.tools.attach.VirtualMachine; -import com.sun.tools.attach.VirtualMachineDescriptor; - -import tlc2.tool.distributed.management.TLCStatisticsMXBean; - -/* - * This class does not compile in the Eclipse IDE on Ubuntu 18.04 with JaveSE1.8 linked to the - * 8u201-1~webupd8~1 JVM installed from webupd8 and probably fails to compile elsewhere too, - * because Eclipse fails to find the com.sun.tools.attach classes. The fix is to add the JDK's - * tools.jar to the Java installation. On Java 11 this doesn't seem to be an issue. - */ -public class StateMonitor { - - private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //$NON-NLS-1$ - - public static void main(String[] args) throws IOException, MalformedObjectNameException, InterruptedException, AttachNotSupportedException { - int interval = 10; // 10sec interval by default - if (args.length == 1) { - interval = Integer.valueOf(args[0]); - } - - JMXServiceURL url = null; - try { - final List<VirtualMachineDescriptor> vmds = com.sun.tools.attach.VirtualMachine.list(); - vmds.sort(new Comparator<VirtualMachineDescriptor>() { - @Override - public int compare(VirtualMachineDescriptor o1, VirtualMachineDescriptor o2) { - // Sort those vms higher whose display name contains TLC. - final boolean c1 = o1.displayName().contains("TLC"); - final boolean c2 = o2.displayName().contains("TLC"); - if (c1 ^ c2) { - if (c1) { - return -1; - } - return 1; - } - return 0; - } - }); - - int index = 1; - try (Scanner scanner = new Scanner(System.in)) { - rd: while (true) { - index = 1; - System.out.printf("============\n"); - for (VirtualMachineDescriptor vmd : vmds) { - System.out.printf("[%s]: pid=%s, name=%s\n", index++, vmd.id(), vmd.displayName()); - } - System.out.printf("Please select the number of the Java VM running TLC to connect to:\n"); - if (scanner.hasNextInt()) { - index = scanner.nextInt(); - - // Check index is within bounds. - if (index >= 1 && index <= vmds.size()) { - break rd; - } - } - System.err.printf("Invalid selection %s\n", index); - } - } - final VirtualMachineDescriptor tlcVMD = vmds.get(index - 1); - final VirtualMachine vm = tlcVMD.provider().attachVirtualMachine(tlcVMD); - final String address = vm.startLocalManagementAgent(); - url = new JMXServiceURL(address); - System.out.printf("Connecting to TLC running at %s.\n(Hit Ctrl+c to terminate)\n", url); - } catch (NumberFormatException nfe) { - // If monitored VM has been launched with explicit port, use service url instead - // of CAL: - // -Dcom.sun.management.jmxremote - // -Dcom.sun.management.jmxremote.port=10995 - // -Dcom.sun.management.jmxremote.ssl=false - // -Dcom.sun.management.jmxremote.authenticate=false - // => "service:jmx:rmi:///jndi/rmi://localhost:10995/jmxrmi". - url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + args[0] + "/jmxrmi"); - System.out.printf("Connecting to TLC running at %s.\n(Hit Ctrl+c to terminate)\n", url); - } - - final JMXConnector jmxConnector = JMXConnectorFactory.connect(url); - final MBeanServerConnection mbeanServerConnection = jmxConnector.getMBeanServerConnection(); - // ObjectName should be same as your MBean name - final ObjectName mbeanName = new ObjectName(ModelCheckerMXWrapper.OBJ_NAME); - - // Get MBean proxy instance that will be used to make calls to registered MBean - final TLCStatisticsMXBean mbeanProxy = (TLCStatisticsMXBean) MBeanServerInvocationHandler - .newProxyInstance(mbeanServerConnection, mbeanName, TLCStatisticsMXBean.class, true); - - while (true) { - System.out.printf("############ %s ############\n%s", SDF.format(new Date()), mbeanProxy.getCurrentState()); - Thread.sleep(interval * 1000L); - } - - // No need to close the connection because JVM itself terminates. - //jmxConnector.close(); - } -}