summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/MetricsAdminI.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2012-08-09 11:55:34 +0200
committerBenoit Foucher <benoit@zeroc.com>2012-08-09 11:55:34 +0200
commit462ac017296d79ef52d7c62c0938855ee7d267a2 (patch)
treee5d5d909bfd9889b0e605c35d1a91fce3ecb2db2 /cpp/src/Ice/MetricsAdminI.cpp
parentFix (diff)
downloadice-462ac017296d79ef52d7c62c0938855ee7d267a2.tar.bz2
ice-462ac017296d79ef52d7c62c0938855ee7d267a2.tar.xz
ice-462ac017296d79ef52d7c62c0938855ee7d267a2.zip
Fix
Diffstat (limited to 'cpp/src/Ice/MetricsAdminI.cpp')
-rw-r--r--cpp/src/Ice/MetricsAdminI.cpp113
1 files changed, 42 insertions, 71 deletions
diff --git a/cpp/src/Ice/MetricsAdminI.cpp b/cpp/src/Ice/MetricsAdminI.cpp
index f5182f690c5..a4b502bebbb 100644
--- a/cpp/src/Ice/MetricsAdminI.cpp
+++ b/cpp/src/Ice/MetricsAdminI.cpp
@@ -153,7 +153,7 @@ MetricsMapI::getMatching(const MetricsHelper& helper)
map<string, EntryPtr>::const_iterator p = _objects.find(key);
if(p == _objects.end())
{
- p = _objects.insert(make_pair(key, new Entry(this, helper.newMetrics(key)))).first;
+ p = _objects.insert(make_pair(key, newEntry(this, helper.newMetrics(key)))).first;
}
return p->second;
}
@@ -197,15 +197,14 @@ MetricsMapI::detached(Entry* entry)
_detachedQueue.push_back(entry);
}
-MetricsViewI::MetricsViewI()
+MetricsViewI::MetricsViewI(bool enabled) : _enabled(enabled)
{
}
void
-MetricsViewI::add(const string& name, const string& groupBy, int retain, const NameValueDict& accept,
- const NameValueDict& reject)
+MetricsViewI::add(const string& name, const MetricsMapIPtr& map)
{
- _maps.insert(make_pair(name, new MetricsMapI(groupBy, retain, accept, reject)));
+ _maps.insert(make_pair(name, map));
}
void
@@ -264,27 +263,26 @@ MetricsViewI::getMaps() const
return maps;
}
-MetricsAdminI::MetricsAdminI(InitializationData& initData)
+MetricsAdminI::MetricsAdminI(const Ice::PropertiesPtr& properties) : _properties(properties)
{
- const string viewsPrefix = "IceMX.MetricsView.";
-
- vector<string> defaultMaps;
- defaultMaps.push_back("Connection");
- defaultMaps.push_back("Thread");
- defaultMaps.push_back("Request");
- defaultMaps.push_back("Dispatch");
- defaultMaps.push_back("Invocation");
- defaultMaps.push_back("Connect");
- defaultMaps.push_back("EndpointLookups");
-
- PropertiesPtr properties = initData.properties;
+}
- __setNoDelete(true);
+void
+MetricsAdminI::addUpdater(const string& mapName, const UpdaterPtr& updater)
+{
+ _updaters.insert(make_pair(mapName, updater));
+}
- assert(!initData.observer);
- initData.observer = new CommunicatorObserverI(this);
+void
+MetricsAdminI::addFactory(const string& mapName, const MetricsMapFactoryPtr& factory)
+{
+ _factories[mapName] = factory;
- PropertyDict views = properties->getPropertiesForPrefix(viewsPrefix);
+ //
+ // Add maps to views configured with the given map name.
+ //
+ const string viewsPrefix = "IceMX.MetricsView.";
+ PropertyDict views = _properties->getPropertiesForPrefix(viewsPrefix);
for(PropertyDict::const_iterator p = views.begin(); p != views.end(); ++p)
{
string viewName = p->first.substr(viewsPrefix.size());
@@ -294,60 +292,33 @@ MetricsAdminI::MetricsAdminI(InitializationData& initData)
viewName = viewName.substr(0, dotPos);
}
- MetricsViewIPtr view = new MetricsViewI();
- _views.insert(make_pair(viewName, view));
-
- view->setEnabled(properties->getPropertyAsIntWithDefault(viewsPrefix + viewName, 1) > 0);
+ map<string, MetricsViewIPtr>::const_iterator q = _views.find(viewName);
+ if(q == _views.end())
+ {
+ bool enabled = _properties->getPropertyAsIntWithDefault(viewsPrefix + viewName, 1) > 0;
+ q = _views.insert(make_pair(viewName, new MetricsViewI(enabled))).first;
+ }
+ MetricsViewIPtr view = q->second;
- int mapsCount = 0;
- const string mapsPrefix = viewsPrefix + viewName + '.';
- PropertyDict maps = properties->getPropertiesForPrefix(mapsPrefix);
- for(PropertyDict::const_iterator q = maps.begin(); q != maps.end(); ++q)
+ const string mapsPrefix = viewsPrefix + viewName + ".Map.";
+ string mapPrefix = mapsPrefix + mapName;
+ if(_properties->getPropertiesForPrefix(mapPrefix).empty() &&
+ _properties->getPropertiesForPrefix(mapsPrefix).empty())
{
- string mapName = q->first.substr(mapsPrefix.size());
- dotPos = mapName.find('.');
- if(dotPos != string::npos)
- {
- mapName = mapName.substr(0, dotPos);
- }
-
- if(mapName == "GroupBy" || mapName == "Accept" || mapName == "Reject" || mapName == "RetainDetached")
- {
- continue; // Those aren't maps.
- }
-
- ++mapsCount;
-
- string groupBy = properties->getProperty(mapsPrefix + mapName + ".GroupBy");
- int retain = properties->getPropertyAsIntWithDefault(mapsPrefix + mapName + ".RetainDetached", 10);
- NameValueDict accept = parseRule(properties, mapsPrefix + mapName + ".Accept");
- NameValueDict reject = parseRule(properties, mapsPrefix + mapName + ".Reject");
- addMapToView(viewName, mapName, groupBy, retain, accept, reject);
+ mapPrefix = viewsPrefix + viewName;
}
-
- //
- // If no maps were defined explicitly, add default maps.
- //
- if(mapsCount == 0)
+ else
{
- string groupBy = properties->getProperty(viewsPrefix + viewName + ".GroupBy");
- int retain = properties->getPropertyAsIntWithDefault(viewsPrefix + viewName + ".RetainDetached", 10);
- NameValueDict accept = parseRule(properties, viewsPrefix + viewName + ".Accept");
- NameValueDict reject = parseRule(properties, viewsPrefix + viewName + ".Reject");
- for(vector<string>::const_iterator p = defaultMaps.begin(); p != defaultMaps.end(); ++p)
- {
- addMapToView(viewName, *p, groupBy, retain, accept, reject);
- }
+ continue; // This map isn't configured for this view.
}
- }
- __setNoDelete(false);
-}
+ string groupBy = _properties->getProperty(mapPrefix + ".GroupBy");
+ int retain = _properties->getPropertyAsIntWithDefault(mapPrefix + ".RetainDetached", 10);
+ NameValueDict accept = parseRule(_properties, mapPrefix + ".Accept");
+ NameValueDict reject = parseRule(_properties, mapPrefix + ".Reject");
-void
-MetricsAdminI::addUpdater(const string& mapName, const UpdaterPtr& updater)
-{
- _updaters.insert(make_pair(mapName, updater));
+ view->add(mapName, factory->create(groupBy, retain, accept, reject));
+ }
}
vector<MetricsMapI::EntryPtr>
@@ -419,9 +390,9 @@ MetricsAdminI::addMapToView(const string& view,
map<string, MetricsViewIPtr>::const_iterator p = _views.find(view);
if(p == _views.end())
{
- p = _views.insert(make_pair(view, new MetricsViewI())).first;
+ p = _views.insert(make_pair(view, new MetricsViewI(true))).first;
}
- p->second->add(mapName, groupBy, retain, accept, reject);
+ p->second->add(mapName, _factories[mapName]->create(groupBy, retain, accept, reject));
map<string, UpdaterPtr>::const_iterator q = _updaters.find(mapName);
if(q != _updaters.end())