18
18
import java .nio .file .*;
19
19
import java .util .Map ;
20
20
import java .util .HashMap ;
21
+ import java .util .List ;
21
22
import java .lang .management .ManagementFactory ;
22
23
import java .util .regex .Matcher ;
23
24
import java .util .regex .Pattern ;
24
25
import java .util .ArrayList ;
26
+ import java .util .Collections ;
27
+
25
28
import com .sun .management .OperatingSystemMXBean ;
26
29
27
30
public class MachineInfo {
28
31
public static final String [] UNAME_CMD = new String [] {"uname" , "-a" };
29
32
public static final String [] SYS_ARCH_CMD = new String [] {"uname" , "-m" };
30
33
public static final String [] PROC_ARCH_CMD = new String [] {"uname" , "-p" };
34
+ public static final String [] LINUX_OS_CMD = new String [] {"bash" , "-c" , "cat /etc/os-release" };
35
+ public static final String [] LINUX_OS_NAME_CMD = new String [] {"bash" , "-c" , "grep '^NAME' /etc/os-release | awk -F'=' ' gsub(/\" /,\" \" ) { print $2}'" };
36
+ public static final String [] LINUX_OS_VERSION_CMD = new String [] {"bash" , "-c" , "grep '^VERSION_ID' /etc/os-release | awk -F'=' ' gsub(/\" /,\" \" ) { print $2}'" };
37
+
31
38
public static final String [] MICRO_ARCH_CMD = new String [] {"bash" , "-c" , "cat /proc/cpuinfo | grep 'model name' | uniq" };
32
39
public static final String [] ULIMIT_CMD = new String [] {"bash" , "-c" , "ulimit -a" };
33
40
@@ -60,9 +67,12 @@ public class MachineInfo {
60
67
61
68
62
69
private Map <String , Info > infoMap ;
63
-
70
+ private CmdExecutor ce ;
71
+
64
72
public MachineInfo () {
65
73
this .infoMap = new HashMap <String , Info >();
74
+ this .ce = CmdExecutor .getInstance ();
75
+
66
76
}
67
77
68
78
public Map <String , Info > getInfoMap () {
@@ -75,6 +85,7 @@ private void putInfo(Info info) {
75
85
76
86
public void checkInfo () {
77
87
getSysInfo ();
88
+ getOsLabel ();
78
89
getPrerequisiteInfo ();
79
90
getRuntimeInfo ();
80
91
getPhysicalMemoryInfo ();
@@ -86,9 +97,10 @@ public void checkInfo() {
86
97
public String toString () {
87
98
StringBuilder sb = new StringBuilder ();
88
99
String newline = "" ;
89
- for (Map .Entry <String , Info > pair : infoMap .entrySet ()) {
90
- String name = pair .getKey ();
91
- Info info = pair .getValue ();
100
+ List <String > keys = new ArrayList <>(infoMap .keySet ());
101
+ Collections .sort (keys );
102
+ for (String name : keys ) {
103
+ Info info = infoMap .get (name );
92
104
String output = info .output != null ? info .output : "" ;
93
105
if (output .contains ("\n " )) {
94
106
output = "\n " + output ;
@@ -170,7 +182,6 @@ private void validateInfo() {
170
182
}
171
183
172
184
private void getSysInfo () {
173
- CmdExecutor ce = CmdExecutor .getInstance ();
174
185
putInfo (new Info ("uname" , UNAME_CMD , ce .execute (UNAME_CMD ), null ));
175
186
if (System .getProperty ("os.name" ).toLowerCase ().contains ("mac" )) {
176
187
putInfo (new Info ("cpuCores" , CPU_CORES_CMD , ce .execute (CPU_CORES_CMD_MAC ), null ));
@@ -182,18 +193,30 @@ private void getSysInfo() {
182
193
putInfo (new Info ("sysArch" , SYS_ARCH_CMD , ce .execute (SYS_ARCH_CMD ), null ));
183
194
putInfo (new Info ("procArch" , PROC_ARCH_CMD , ce .execute (PROC_ARCH_CMD ), null ));
184
195
String microArchOutput = ce .execute (MICRO_ARCH_CMD );
185
- String microArch = "" ;
186
196
if (microArchOutput .toLowerCase ().contains ("skylake" )) {
187
- microArch = "skylake" ;
197
+ String microArch = "skylake" ;
198
+ putInfo (new Info ("microArch" , MICRO_ARCH_CMD , microArch , null ));
188
199
}
189
- putInfo (new Info ("microArch" , MICRO_ARCH_CMD , microArch , null ));
190
200
putInfo (new Info ("sysOS" , SYS_OS_CMD , ce .execute (SYS_OS_CMD ), null ));
191
201
putInfo (new Info ("ulimit" , ULIMIT_CMD , ce .execute (ULIMIT_CMD ), null ));
192
202
putInfo (new Info ("docker" , CHECK_DOCKER_CMD , ce .execute (CHECK_DOCKER_CMD ), null ));
193
203
}
194
204
205
+ private void getOsLabel () {
206
+ if (System .getProperty ("os.name" ).toLowerCase ().contains ("linux" )) {
207
+ String osName = ce .execute (LINUX_OS_NAME_CMD ).toLowerCase ();
208
+ if (osName .contains ("red hat enterprise linux" )) {
209
+ osName = "rhel" ;
210
+ }
211
+ String fullOsVersion = ce .execute (LINUX_OS_VERSION_CMD );
212
+ String [] osVersions = fullOsVersion .split ("\\ ." );
213
+ String osLabel = osName + "." + osVersions [0 ];
214
+ putInfo (new Info ("osLabel" , LINUX_OS_CMD , osLabel , null ));
215
+ putInfo (new Info ("osInfo" , LINUX_OS_CMD , ce .execute (LINUX_OS_CMD ), null ));
216
+ }
217
+ }
218
+
195
219
private void getPrerequisiteInfo () {
196
- CmdExecutor ce = CmdExecutor .getInstance ();
197
220
putInfo (new Info ("antVersion" , ANT_VERSION_CMD , ce .execute (ANT_VERSION_CMD ), "1.9.6" ));
198
221
/* required version is 4.1, but some exception applies, do not verify for now*/
199
222
putInfo (new Info ("makeVersion" , MAKE_VERSION_CMD , ce .execute (MAKE_VERSION_CMD ), null ));
@@ -221,7 +244,6 @@ private void getPhysicalMemoryInfo() {
221
244
}
222
245
223
246
private void getOtherInfo () {
224
- CmdExecutor ce = CmdExecutor .getInstance ();
225
247
putInfo (new Info ("gcc version" , GCC_VERSION_CMD , ce .execute (GCC_VERSION_CMD ), null ));
226
248
putInfo (new Info ("xlc version" , XLC_VERSION_CMD , ce .execute (XLC_VERSION_CMD ), null ));
227
249
putInfo (new Info ("gdb version" , GDB_VERSION_CMD , ce .execute (GDB_VERSION_CMD ), null ));
0 commit comments