From 494ed4ed3e746188e1f82b9b227d3905f7a13515 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 3 Sep 2014 13:22:19 +0300 Subject: [PATCH] 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. --- .../java/src/org/hyperic/sigar/win32/Pdh.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/bindings/java/src/org/hyperic/sigar/win32/Pdh.java b/bindings/java/src/org/hyperic/sigar/win32/Pdh.java index a584cd31..4a9942ce 100644 --- a/bindings/java/src/org/hyperic/sigar/win32/Pdh.java +++ b/bindings/java/src/org/hyperic/sigar/win32/Pdh.java @@ -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 {