osName = "linux";
command = "vmstat -n ";
}
else if(osName.startsWith("Win")){
osName = "windows";
raiseEvent(DATA_SOURCE_EXCEPTION_EVENT, System.currentTimeMillis(), true, new TranslatableMessage(
"event.initializationError", "OS: " + osName + " Not Supported"));
return;
}//since 0.9.0 ->
else if(osName.equals("SunOS")){
osName = "solaris";
raiseEvent(DATA_SOURCE_EXCEPTION_EVENT, System.currentTimeMillis(), true, new TranslatableMessage(
"event.initializationError", "OS: " + osName + " Not Supported"));
return;
}
else if(osName.equals("Mac OS X") || osName.equals("Darwin")){//os.name "Darwin" since 2.6.0
osName = "mac_os_x";
command = "vm_stat -n"; //TODO Implement this for OSX, output format is different
raiseEvent(DATA_SOURCE_EXCEPTION_EVENT, System.currentTimeMillis(), true, new TranslatableMessage(
"event.initializationError", "OS: " + osName + " Not Supported"));
return;
}else{
raiseEvent(DATA_SOURCE_EXCEPTION_EVENT, System.currentTimeMillis(), true, new TranslatableMessage(
"event.initializationError", "OS: " + osName + " Not Supported"));
return;
}
switch (vo.getOutputScale()) {
case VMStatDataSourceVO.OutputScale.LOWER_K:
command += "-S k ";
break;
case VMStatDataSourceVO.OutputScale.UPPER_K:
command += "-S K ";
break;
case VMStatDataSourceVO.OutputScale.LOWER_M:
command += "-S m ";
break;
case VMStatDataSourceVO.OutputScale.UPPER_M:
command += "-S M ";
break;
}
command += vo.getPollSeconds();
try {
vmstatProcess = Runtime.getRuntime().exec(command);
// Create the input stream readers.
in = new BufferedReader(new InputStreamReader(vmstatProcess.getInputStream()));
// Read the first two lines of output. They are the headers.
in.readLine();
String headers = in.readLine();
// Create a mapping of attribute ids to split array positions.
attributePositions = new HashMap<Integer, Integer>();
headers = headers.trim();
String[] headerParts = headers.split("\\s+");
for (int i = 0; i < headerParts.length; i++) {
int attributeId = -1;
if ("r".equals(headerParts[i]))
attributeId = VMStatPointLocatorVO.Attributes.PROCS_R;
else if ("b".equals(headerParts[i]))
attributeId = VMStatPointLocatorVO.Attributes.PROCS_B;
else if ("swpd".equals(headerParts[i]))
attributeId = VMStatPointLocatorVO.Attributes.MEMORY_SWPD;
else if ("free".equals(headerParts[i]))
attributeId = VMStatPointLocatorVO.Attributes.MEMORY_FREE;
else if ("buff".equals(headerParts[i]))
attributeId = VMStatPointLocatorVO.Attributes.MEMORY_BUFF;
else if ("cache".equals(headerParts[i]))
attributeId = VMStatPointLocatorVO.Attributes.MEMORY_CACHE;
else if ("si".equals(headerParts[i]))
attributeId = VMStatPointLocatorVO.Attributes.SWAP_SI;
else if ("so".equals(headerParts[i]))
attributeId = VMStatPointLocatorVO.Attributes.SWAP_SO;
else if ("bi".equals(headerParts[i]))
attributeId = VMStatPointLocatorVO.Attributes.IO_BI;
else if ("bo".equals(headerParts[i]))
attributeId = VMStatPointLocatorVO.Attributes.IO_BO;
else if ("in".equals(headerParts[i]))
attributeId = VMStatPointLocatorVO.Attributes.SYSTEM_IN;
else if ("cs".equals(headerParts[i]))
attributeId = VMStatPointLocatorVO.Attributes.SYSTEM_CS;
else if ("us".equals(headerParts[i]))
attributeId = VMStatPointLocatorVO.Attributes.CPU_US;
else if ("sy".equals(headerParts[i]))
attributeId = VMStatPointLocatorVO.Attributes.CPU_SY;
else if ("id".equals(headerParts[i]))
attributeId = VMStatPointLocatorVO.Attributes.CPU_ID;
else if ("wa".equals(headerParts[i]))
attributeId = VMStatPointLocatorVO.Attributes.CPU_WA;
else if ("st".equals(headerParts[i]))
attributeId = VMStatPointLocatorVO.Attributes.CPU_ST;
if (attributeId != -1)
attributePositions.put(attributeId, i);
}
// Read the first line of data. This is a summary of beginning of time until now, so it is no good for
// our purposes. Just throw it away.
in.readLine();
returnToNormal(DATA_SOURCE_EXCEPTION_EVENT, System.currentTimeMillis());
}
catch (IOException e) {
raiseEvent(DATA_SOURCE_EXCEPTION_EVENT, System.currentTimeMillis(), true, new TranslatableMessage(
"event.initializationError", e.getMessage()));
}
}