Some metrics are missing the '/sec' suffix. This fix first tries to add

the counter without the '/sec' and if fails, try again with it. If the
second call fails, throw an exception.This issue must be addressed at the
java level (and not C code), since the counter names must be translated
before to support i18n native OS locals.
Please also note, the C code (at Pdh.c), tries to do the same, but at
this level we cannot use the translation mechanism the Java level offers,
hence this fix won't handle non-English i18n locals.
This commit is contained in:
unknown 2014-09-03 13:22:19 +03:00
parent f12b8e32d3
commit 494ed4ed3e
1 changed files with 20 additions and 2 deletions

View File

@ -286,6 +286,24 @@ public class Pdh extends Win32 {
return trans.toString();
}
private long addPdhCounter(String path, boolean format) throws Win32Exception {
long counter;
/*
* Some metrics are missing the '/sec' suffix. This flow,
* first tries to add the counter without the '/sec' and
* if fails, try again with it. If the seconds call fails,
* throw an exception.This issue must be addressed
* at the java level (and not C code), since the counter
* names must be translated before.
*/
try {
counter = pdhAddCounter(this.query, translate(path));
} catch (Win32Exception e) {
counter = pdhAddCounter(this.query, translate(path + "/sec"));
}
return counter;
}
private double getValue(String path, boolean format)
throws Win32Exception {
@ -293,8 +311,8 @@ public class Pdh extends Win32 {
pdhConnectMachine(this.hostname);
}
long counter =
pdhAddCounter(this.query, translate(path));
long counter = addPdhCounter(path, format);
try {
return pdhGetValue(this.query, counter, format);
} finally {