summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/NodeI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceGrid/NodeI.cpp')
-rw-r--r--cpp/src/IceGrid/NodeI.cpp39
1 files changed, 37 insertions, 2 deletions
diff --git a/cpp/src/IceGrid/NodeI.cpp b/cpp/src/IceGrid/NodeI.cpp
index 1067282fc26..8cfd5d9ec0d 100644
--- a/cpp/src/IceGrid/NodeI.cpp
+++ b/cpp/src/IceGrid/NodeI.cpp
@@ -220,7 +220,24 @@ NodeI::NodeI(const Ice::ObjectAdapterPtr& adapter,
Ice::ObjectPrx registry = getCommunicator()->stringToProxy("IceGrid/Registry@IceGrid.Registry.Internal");
_observer = RegistryPrx::uncheckedCast(registry)->getNodeObserver();
-#ifndef _WIN32
+#if defined(_WIN32)
+ PDH_STATUS err = PdhOpenQuery(0, 0, &_query);
+ if(err != ERROR_SUCCESS)
+ {
+ Ice::SyscallException ex(__FILE__, __LINE__);
+ ex.error = err;
+ Ice::Warning out(_traceLevels->logger);
+ out << "can't open performance data query:\n" << ex;
+ }
+ err = PdhAddCounter(_query, "\\Processor(_Total)\\% Processor Time", 0, &_counter);
+ if(err != ERROR_SUCCESS)
+ {
+ Ice::SyscallException ex(__FILE__, __LINE__);
+ ex.error = err;
+ Ice::Warning out(_traceLevels->logger);
+ out << "can't add performance counter:\n" << ex;
+ }
+#else
#if defined(__linux)
_nproc = static_cast<int>(sysconf(_SC_NPROCESSORS_ONLN));
#elif defined(__APPLE__)
@@ -239,6 +256,13 @@ NodeI::NodeI(const Ice::ObjectAdapterPtr& adapter,
#endif
}
+NodeI::~NodeI()
+{
+#ifdef _WIN32
+ PdhCloseQuery(_query);
+#endif
+}
+
ServerPrx
NodeI::loadServer(const ServerDescriptorPtr& desc,
StringAdapterPrxDict& adapters,
@@ -535,7 +559,18 @@ NodeI::keepAlive()
//
// TODO: Use CPU utilization
//
- info.load = 1.0f;
+ if(PdhCollectQueryData(_query) != ERROR_SUCCESS)
+ {
+ // TODO: WARNING
+ info.load = 1.0f;
+ }
+ else
+ {
+ DWORD type;
+ PDH_FMT_COUNTERVALUE value;
+ PdhGetFormattedCounterValue(_counter, PDH_FMT_LONG, &type, &value);
+ info.load = static_cast<float>(value.longValue) / 100.0f;
+ }
#elif defined(__sun) || defined(__linux) || defined(__APPLE__)
//
// We use the load average divided by the number of