author | jbachorik |
Fri, 03 Apr 2015 15:39:38 +0200 | |
changeset 30803 | 17e70318af8b |
parent 30334 | 22a5f09f4da9 |
child 31458 | 4a8674cc6f9e |
permissions | -rw-r--r-- |
30334
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
1 |
/* |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
2 |
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
4 |
* |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
5 |
* This code is free software; you can redistribute it and/or modify it |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
7 |
* published by the Free Software Foundation. |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
8 |
* |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
9 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
10 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
11 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
12 |
* version 2 for more details (a copy is included in the LICENSE file that |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
13 |
* accompanied this code). |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
14 |
* |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
15 |
* You should have received a copy of the GNU General Public License version |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
16 |
* 2 along with this work; if not, write to the Free Software Foundation, |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
17 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
18 |
* |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
19 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
20 |
* or visit www.oracle.com if you need additional information or have any |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
21 |
* questions. |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
22 |
*/ |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
23 |
import java.io.IOException; |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
24 |
import java.net.BindException; |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
25 |
import java.util.ArrayList; |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
26 |
import java.util.Arrays; |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
27 |
import java.util.List; |
30803
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
28 |
import java.util.Properties; |
30334
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
29 |
import java.util.concurrent.atomic.AtomicBoolean; |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
30 |
import java.util.function.Consumer; |
30803
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
31 |
import java.util.regex.Pattern; |
30334
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
32 |
import java.util.stream.Collectors; |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
33 |
import sun.management.Agent; |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
34 |
import sun.management.AgentConfigurationError; |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
35 |
|
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
36 |
import jdk.testlibrary.JDKToolLauncher; |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
37 |
import jdk.testlibrary.ProcessTools; |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
38 |
|
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
39 |
/** |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
40 |
* A helper class for issuing ManagementAgent.* diagnostic commands and capturing |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
41 |
* their output. |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
42 |
*/ |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
43 |
final class ManagementAgentJcmd { |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
44 |
private static final String CMD_STOP = "ManagementAgent.stop"; |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
45 |
private static final String CMD_START = "ManagementAgent.start"; |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
46 |
private static final String CMD_START_LOCAL = "ManagementAgent.start_local"; |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
47 |
private static final String CMD_STATUS = "ManagementAgent.status"; |
30803
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
48 |
private static final String CMD_PRINTPERF = "PerfCounter.print"; |
30334
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
49 |
|
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
50 |
private final String id; |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
51 |
private final boolean verbose; |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
52 |
|
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
53 |
public ManagementAgentJcmd(String targetApp, boolean verbose) { |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
54 |
this.id = targetApp; |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
55 |
this.verbose = verbose; |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
56 |
} |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
57 |
|
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
58 |
/** |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
59 |
* `jcmd` |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
60 |
* @return The JCMD output |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
61 |
* @throws IOException |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
62 |
* @throws InterruptedException |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
63 |
*/ |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
64 |
public String list() throws IOException, InterruptedException { |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
65 |
return jcmd(); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
66 |
} |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
67 |
|
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
68 |
/** |
30803
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
69 |
* `jcmd PerfCounter.print` |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
70 |
* @return Returns the available performance counters with their values as |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
71 |
* {@linkplain Properties} instance |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
72 |
* @throws IOException |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
73 |
* @throws InterruptedException |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
74 |
*/ |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
75 |
public Properties perfCounters() throws IOException, InterruptedException { |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
76 |
return perfCounters(".*"); |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
77 |
} |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
78 |
|
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
79 |
/** |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
80 |
* `jcmd PerfCounter.print | grep {exp}>` |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
81 |
* @param regex Regular expression for including perf counters in the result |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
82 |
* @return Returns the matching performance counters with their values |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
83 |
* as {@linkplain Properties} instance |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
84 |
* @throws IOException |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
85 |
* @throws InterruptedException |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
86 |
*/ |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
87 |
public Properties perfCounters(String regex) throws IOException, InterruptedException { |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
88 |
Pattern pat = Pattern.compile(regex); |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
89 |
Properties p = new Properties(); |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
90 |
for(String l : jcmd(CMD_PRINTPERF).split("\\n")) { |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
91 |
String[] kv = l.split("="); |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
92 |
if (kv.length > 1) { |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
93 |
if (pat.matcher(kv[0]).matches()) { |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
94 |
p.setProperty(kv[0], kv[1].replace("\"", "")); |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
95 |
} |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
96 |
} |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
97 |
} |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
98 |
return p; |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
99 |
} |
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
100 |
|
17e70318af8b
8075926: Add a sun.management.JMXConnectorServer perf counter to track its state
jbachorik
parents:
30334
diff
changeset
|
101 |
/** |
30334
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
102 |
* `jcmd <app> ManagementAgent.stop` |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
103 |
* @return The JCMD output |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
104 |
* @throws IOException |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
105 |
* @throws InterruptedException |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
106 |
*/ |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
107 |
public String stop() throws IOException, InterruptedException { |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
108 |
return jcmd(CMD_STOP); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
109 |
} |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
110 |
|
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
111 |
/** |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
112 |
* `jcmd <app> ManagementAgent.start_local` |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
113 |
* @return The JCMD output |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
114 |
* @throws IOException |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
115 |
* @throws InterruptedException |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
116 |
*/ |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
117 |
public String startLocal() throws IOException, InterruptedException { |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
118 |
return jcmd(CMD_START_LOCAL); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
119 |
} |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
120 |
|
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
121 |
/** |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
122 |
* `jcmd <app> ManagementAgent.start <args>` |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
123 |
* @return The JCMD output |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
124 |
* @param params The arguments to <b>ManagementAgent.start</b> command |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
125 |
* @throws IOException |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
126 |
* @throws InterruptedException |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
127 |
*/ |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
128 |
public String start(String ... params) throws IOException, InterruptedException { |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
129 |
return start(c->{}, params); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
130 |
} |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
131 |
|
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
132 |
/** |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
133 |
* `jcmd <pp> ManagementAgent.start <args>` |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
134 |
* @param c A string consumer used to inspect the jcmd output line-by-line |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
135 |
* @param params The arguments to <b>ManagementAgent.start</b> command |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
136 |
* @return The JCMD output |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
137 |
* @throws IOException |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
138 |
* @throws InterruptedException |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
139 |
*/ |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
140 |
public String start(Consumer<String> c, String ... params) throws IOException, InterruptedException { |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
141 |
List<String> args = new ArrayList<>(); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
142 |
args.add(CMD_START); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
143 |
args.addAll(Arrays.asList(params)); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
144 |
return jcmd(c, args.toArray(new String[args.size()])); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
145 |
} |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
146 |
|
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
147 |
public String status() throws IOException, InterruptedException { |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
148 |
return jcmd(CMD_STATUS); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
149 |
} |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
150 |
|
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
151 |
/** |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
152 |
* Run the "jcmd" command |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
153 |
* |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
154 |
* @param command Command + arguments |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
155 |
* @return The JCMD output |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
156 |
* @throws IOException |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
157 |
* @throws InterruptedException |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
158 |
*/ |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
159 |
private String jcmd(String ... command) throws IOException, InterruptedException { |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
160 |
if (command.length == 0) { |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
161 |
return jcmd(null, c->{}); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
162 |
} else { |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
163 |
return jcmd(c->{}, command); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
164 |
} |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
165 |
} |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
166 |
|
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
167 |
/** |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
168 |
* Run the "jcmd" command |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
169 |
* |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
170 |
* @param c {@linkplain Consumer} instance |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
171 |
* @param command Command + arguments |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
172 |
* @return The JCMD output |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
173 |
* @throws IOException |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
174 |
* @throws InterruptedException |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
175 |
*/ |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
176 |
private String jcmd(Consumer<String> c, String ... command) throws IOException, InterruptedException { |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
177 |
return jcmd(id, c, command); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
178 |
} |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
179 |
|
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
180 |
/** |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
181 |
* Run the "jcmd" command |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
182 |
* |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
183 |
* @param target The target application name (or PID) |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
184 |
* @param c {@linkplain Consumer} instance |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
185 |
* @param command Command + arguments |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
186 |
* @return The JCMD output |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
187 |
* @throws IOException |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
188 |
* @throws InterruptedException |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
189 |
*/ |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
190 |
private String jcmd(String target, final Consumer<String> c, String ... command) throws IOException, InterruptedException { |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
191 |
dbg_print("[jcmd] " + (command.length > 0 ? command[0] : "list")); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
192 |
|
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
193 |
JDKToolLauncher l = JDKToolLauncher.createUsingTestJDK("jcmd"); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
194 |
l.addToolArg(target); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
195 |
for (String cmd : command) { |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
196 |
l.addToolArg(cmd); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
197 |
} |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
198 |
|
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
199 |
StringBuilder output = new StringBuilder(); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
200 |
|
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
201 |
AtomicBoolean portUnavailable = new AtomicBoolean(false); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
202 |
Process p = ProcessTools.startProcess( |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
203 |
"jcmd", |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
204 |
new ProcessBuilder(l.getCommand()), |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
205 |
line -> { |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
206 |
if (line.contains("BindException") || |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
207 |
line.contains(Agent.getText(AgentConfigurationError.CONNECTOR_SERVER_IO_ERROR))) { |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
208 |
portUnavailable.set(true); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
209 |
} else { |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
210 |
output.append(line).append('\n'); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
211 |
c.accept(line); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
212 |
} |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
213 |
} |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
214 |
); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
215 |
|
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
216 |
p.waitFor(); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
217 |
dbg_print("[jcmd] --------"); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
218 |
if (portUnavailable.get()) { |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
219 |
String cmd = Arrays.asList(l.getCommand()).stream() |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
220 |
.collect( |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
221 |
Collectors.joining(" ", "", ": Unable to bind address") |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
222 |
); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
223 |
throw new BindException(cmd); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
224 |
} |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
225 |
|
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
226 |
return output.toString(); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
227 |
} |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
228 |
|
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
229 |
private void dbg_print(String msg) { |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
230 |
if (verbose) { |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
231 |
System.out.println("DBG: " + msg); |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
232 |
} |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
233 |
} |
22a5f09f4da9
8023093: Add ManagementAgent.status diagnostic command
jbachorik
parents:
diff
changeset
|
234 |
} |