summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/ServerCache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceGrid/ServerCache.cpp')
-rw-r--r--cpp/src/IceGrid/ServerCache.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/cpp/src/IceGrid/ServerCache.cpp b/cpp/src/IceGrid/ServerCache.cpp
index 23d20d2af76..0703e26df65 100644
--- a/cpp/src/IceGrid/ServerCache.cpp
+++ b/cpp/src/IceGrid/ServerCache.cpp
@@ -327,6 +327,35 @@ ServerEntry::getNode() const
return _proxy ? _cache.getNodeCache().get(_loaded->node) : _cache.getNodeCache().get(_load->node);
}
+float
+ServerEntry::getLoad(LoadSample sample) const
+{
+ Lock sync(*this);
+ if(!_loaded.get() && !_load.get())
+ {
+ throw ServerNotExistException();
+ }
+
+ ServerInfo& info = _proxy ? *_loaded.get() : *_load.get();
+ float factor;
+ LoadInfo load = _cache.getNodeCache().get(info.node)->getLoadInfoAndLoadFactor(info.application, factor);
+ if(factor < 0.0f)
+ {
+ factor = 1.0f / load.nProcessors;
+ }
+ switch(sample)
+ {
+ case LoadSample1:
+ return load.load1 * factor;
+ case LoadSample5:
+ return load.load5 * factor;
+ case LoadSample15:
+ return load.load15 * factor;
+ default:
+ assert(false);
+ }
+}
+
ServerPrx
ServerEntry::syncImpl(map<string, AdapterPrx>& adpts, int& activationTimeout, int& deactivationTimeout, string& node)
{