summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/MetricsAdminI.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/MetricsAdminI.h')
-rw-r--r--cpp/src/Ice/MetricsAdminI.h38
1 files changed, 24 insertions, 14 deletions
diff --git a/cpp/src/Ice/MetricsAdminI.h b/cpp/src/Ice/MetricsAdminI.h
index 260d283a2e2..0ed8a5a050d 100644
--- a/cpp/src/Ice/MetricsAdminI.h
+++ b/cpp/src/Ice/MetricsAdminI.h
@@ -495,8 +495,9 @@ public:
MetricsViewI(const std::string&);
- void update(const Ice::PropertiesPtr&, const std::map<std::string, MetricsMapFactoryPtr>&,
- std::set<MetricsMapFactoryPtr>&, const Ice::LoggerPtr&);
+ bool addOrUpdateMap(const Ice::PropertiesPtr&, const std::string&, const MetricsMapFactoryPtr&,
+ const Ice::LoggerPtr&);
+ bool removeMap(const std::string&);
MetricsView getMetrics();
MetricsFailuresSeq getFailures(const std::string&);
@@ -524,8 +525,18 @@ public:
template<class MetricsType> void
registerMap(const std::string& map, Updater* updater)
{
- Lock sync(*this);
- _factories[map] = new MetricsMapFactoryT<MetricsType>(updater);
+ bool update;
+ MetricsMapFactoryPtr factory;
+ {
+ Lock sync(*this);
+ factory = new MetricsMapFactoryT<MetricsType>(updater);
+ _factories[map] = factory;
+ addOrUpdateMap(map, factory);
+ }
+ if(update)
+ {
+ factory->update();
+ }
}
template<class MemberMetricsType, class MetricsType> void
@@ -534,18 +545,14 @@ public:
Lock sync(*this);
std::map<std::string, MetricsMapFactoryPtr>::const_iterator p = _factories.find(map);
- assert(p != _factories.end());
-
- MetricsMapFactoryT<MetricsType>* factory = dynamic_cast<MetricsMapFactoryT<MetricsType>*>(p->second.get());
- factory->template registerSubMap<MemberMetricsType>(subMap, member);
+ if(p != _factories.end())
+ {
+ MetricsMapFactoryT<MetricsType>* factory = dynamic_cast<MetricsMapFactoryT<MetricsType>*>(p->second.get());
+ factory->template registerSubMap<MemberMetricsType>(subMap, member);
+ }
}
- void
- unregisterMap(const std::string& map)
- {
- Lock sync(*this);
- _factories.erase(map);
- }
+ void unregisterMap(const std::string&);
virtual Ice::StringSeq getMetricsViewNames(const ::Ice::Current&);
virtual MetricsView getMetricsView(const std::string&, const ::Ice::Current&);
@@ -563,6 +570,9 @@ private:
void updated(const Ice::PropertyDict&);
+ bool addOrUpdateMap(const std::string&, const MetricsMapFactoryPtr&);
+ bool removeMap(const std::string&);
+
std::map<std::string, MetricsViewIPtr> _views;
std::map<std::string, MetricsMapFactoryPtr> _factories;