diff options
Diffstat (limited to 'cpp/src/Ice/MetricsAdminI.h')
-rw-r--r-- | cpp/src/Ice/MetricsAdminI.h | 88 |
1 files changed, 51 insertions, 37 deletions
diff --git a/cpp/src/Ice/MetricsAdminI.h b/cpp/src/Ice/MetricsAdminI.h index 5215452d206..c3e86001fdd 100644 --- a/cpp/src/Ice/MetricsAdminI.h +++ b/cpp/src/Ice/MetricsAdminI.h @@ -17,12 +17,14 @@ namespace IceMX { -class ObjectObserverUpdater; -typedef IceUtil::Handle<ObjectObserverUpdater> ObjectObserverUpdaterPtr; +class Updater; +typedef IceUtil::Handle<Updater> UpdaterPtr; -class ObjectHelper; +class MetricsHelper; -class MetricsMap : public IceUtil::Shared, public IceUtil::Mutex +typedef std::map<std::string, std::string> NameValueDict; + +class MetricsMapI : public IceUtil::Shared, public IceUtil::Mutex { public: @@ -30,19 +32,19 @@ public: { public: - Entry(MetricsMap* map, const MetricsObjectPtr& object) : _map(map), _object(object) + Entry(MetricsMapI* map, const MetricsPtr& object) : _map(map), _object(object) { } - template<typename ObjectHelper, typename MetricsObjectPtrType> MetricsObjectPtrType - attach(const ObjectHelper& helper) + template<typename MetricsHelper, typename MetricsPtrType> MetricsPtrType + attach(const MetricsHelper& helper) { IceUtil::Mutex::Lock sync(*this); ++_object->total; ++_object->current; - MetricsObjectPtrType obj = MetricsObjectPtrType::dynamicCast(_object); - helper.initMetricsObject(obj); + MetricsPtrType obj = MetricsPtrType::dynamicCast(_object); + helper.initMetrics(obj); return obj; } @@ -64,20 +66,31 @@ public: void failed(const std::string& exceptionName) { IceUtil::Mutex::Lock sync(*this); - ++_object->failures[exceptionName]; + ++_failures[exceptionName]; } - MetricsObjectPtr + MetricsPtr clone() const { IceUtil::Mutex::Lock sync(*this); // TODO: Fix ice_clone to use a co-variant type. - return dynamic_cast<MetricsObject*>(_object->ice_clone().get()); + return dynamic_cast<Metrics*>(_object->ice_clone().get()); + } + + MetricsFailures + getFailures() const + { + MetricsFailures f; + + IceUtil::Mutex::Lock sync(*this); + f.id = _object->id; + f.failures = _failures; + return f; } - template<typename Function, typename MetricsObjectType> void - execute(Function func, const MetricsObjectType& obj) + template<typename Function, typename MetricsType> void + execute(Function func, const MetricsType& obj) { IceUtil::Mutex::Lock sync(*this); func(obj); @@ -96,16 +109,18 @@ public: private: - MetricsMap* _map; - MetricsObjectPtr _object; + MetricsMapI* _map; + MetricsPtr _object; + StringIntDict _failures; }; typedef IceUtil::Handle<Entry> EntryPtr; - MetricsMap(const std::string&, int, const NameValueDict&, const NameValueDict&); + MetricsMapI(const std::string&, int, const NameValueDict&, const NameValueDict&); - MetricsObjectSeq getMetricsObjects(); + MetricsMap getMetrics(); + MetricsFailuresSeq getFailures(); - EntryPtr getMatching(const ObjectHelper&); + EntryPtr getMatching(const MetricsHelper&); private: @@ -121,13 +136,13 @@ private: std::map<std::string, EntryPtr> _objects; std::deque<Entry*> _detachedQueue; }; -typedef IceUtil::Handle<MetricsMap> MetricsMapPtr; +typedef IceUtil::Handle<MetricsMapI> MetricsMapIPtr; -class MetricsView : public IceUtil::Shared +class MetricsViewI : public IceUtil::Shared { public: - MetricsView(); + MetricsViewI(); void setEnabled(bool enabled) { @@ -142,18 +157,19 @@ public: void add(const std::string&, const std::string&, int, const NameValueDict&, const NameValueDict&); void remove(const std::string&); - MetricsObjectSeqDict getMetricsObjects(); + MetricsView getMetrics(); + MetricsFailuresSeq getFailures(const std::string&); - MetricsMap::EntryPtr getMatching(const std::string&, const ObjectHelper&) const; + MetricsMapI::EntryPtr getMatching(const std::string&, const MetricsHelper&) const; std::vector<std::string> getMaps() const; private: - std::map<std::string, MetricsMapPtr> _maps; + std::map<std::string, MetricsMapIPtr> _maps; bool _enabled; }; -typedef IceUtil::Handle<MetricsView> MetricsViewPtr; +typedef IceUtil::Handle<MetricsViewI> MetricsViewIPtr; class MetricsAdminI : public MetricsAdmin, public IceUtil::Mutex { @@ -161,26 +177,24 @@ public: MetricsAdminI(::Ice::InitializationData&); - std::vector<MetricsMap::EntryPtr> getMatching(const std::string&, const ObjectHelper&) const; - void addUpdater(const std::string&, const ObjectObserverUpdaterPtr&); + std::vector<MetricsMapI::EntryPtr> getMatching(const std::string&, const MetricsHelper&) const; + void addUpdater(const std::string&, const UpdaterPtr&); - virtual MetricsObjectSeqDict getMetricsMaps(const std::string&, const ::Ice::Current&); - virtual MetricsObjectSeqDictDict getAllMetricsMaps(const ::Ice::Current&); + virtual Ice::StringSeq getMetricsViewNames(const ::Ice::Current&); + virtual MetricsView getMetricsView(const std::string&, const ::Ice::Current&); + virtual MetricsFailuresSeq getMetricsFailures(const std::string&, const std::string&, const ::Ice::Current&); + +private: virtual void addMapToView(const std::string&, const std::string&, const std::string&, int, const NameValueDict&, const NameValueDict&, const ::Ice::Current& = ::Ice::Current()); virtual void removeMapFromView(const std::string&, const std::string&, const ::Ice::Current&); - virtual void enableView(const std::string&, const ::Ice::Current&); - virtual void disableView(const std::string&, const ::Ice::Current&); - -private: - void setViewEnabled(const std::string&, bool); - std::map<std::string, MetricsViewPtr> _views; - std::map<std::string, ObjectObserverUpdaterPtr> _updaters; + std::map<std::string, MetricsViewIPtr> _views; + std::map<std::string, UpdaterPtr> _updaters; }; typedef IceUtil::Handle<MetricsAdminI> MetricsAdminIPtr; |