diff options
Diffstat (limited to 'cpp/src/qpid/management')
| -rw-r--r-- | cpp/src/qpid/management/ManagementAgent.cpp | 26 | ||||
| -rw-r--r-- | cpp/src/qpid/management/ManagementAgent.h | 9 | ||||
| -rw-r--r-- | cpp/src/qpid/management/ManagementExchange.cpp | 11 | ||||
| -rw-r--r-- | cpp/src/qpid/management/ManagementExchange.h | 5 |
4 files changed, 34 insertions, 17 deletions
diff --git a/cpp/src/qpid/management/ManagementAgent.cpp b/cpp/src/qpid/management/ManagementAgent.cpp index 85c2acce1d..90da74404b 100644 --- a/cpp/src/qpid/management/ManagementAgent.cpp +++ b/cpp/src/qpid/management/ManagementAgent.cpp @@ -33,6 +33,7 @@ using namespace qpid::broker; using namespace qpid::sys; ManagementAgent::shared_ptr ManagementAgent::agent; +bool ManagementAgent::enabled = 0; ManagementAgent::ManagementAgent (uint16_t _interval) : interval (_interval) { @@ -40,16 +41,21 @@ ManagementAgent::ManagementAgent (uint16_t _interval) : interval (_interval) nextObjectId = uint64_t (qpid::sys::Duration (qpid::sys::now ())); } +void ManagementAgent::enableManagement (void) +{ + enabled = 1; +} + ManagementAgent::shared_ptr ManagementAgent::getAgent (void) { - if (agent.get () == 0) + if (enabled && agent.get () == 0) agent = shared_ptr (new ManagementAgent (10)); return agent; } -void ManagementAgent::setExchange (Exchange::shared_ptr _mexchange, - Exchange::shared_ptr _dexchange) +void ManagementAgent::setExchange (broker::Exchange::shared_ptr _mexchange, + broker::Exchange::shared_ptr _dexchange) { mExchange = _mexchange; dExchange = _dexchange; @@ -57,6 +63,7 @@ void ManagementAgent::setExchange (Exchange::shared_ptr _mexchange, void ManagementAgent::addObject (ManagementObject::shared_ptr object) { + RWlock::ScopedWlock writeLock (userLock); uint64_t objectId = nextObjectId++; object->setObjectId (objectId); @@ -74,6 +81,8 @@ void ManagementAgent::Periodic::fire () void ManagementAgent::clientAdded (void) { + RWlock::ScopedRlock readLock (userLock); + for (ManagementObjectMap::iterator iter = managementObjects.begin (); iter != managementObjects.end (); iter++) @@ -94,7 +103,7 @@ void ManagementAgent::EncodeHeader (Buffer& buf) void ManagementAgent::SendBuffer (Buffer& buf, uint32_t length, - Exchange::shared_ptr exchange, + broker::Exchange::shared_ptr exchange, string routingKey) { intrusive_ptr<Message> msg (new Message ()); @@ -129,9 +138,10 @@ void ManagementAgent::PeriodicProcessing (void) { #define BUFSIZE 65536 #define THRESHOLD 16384 - char msgChars[BUFSIZE]; - uint32_t contentSize; - string routingKey; + RWlock::ScopedWlock writeLock (userLock); + char msgChars[BUFSIZE]; + uint32_t contentSize; + string routingKey; std::list<uint64_t> deleteList; if (managementObjects.empty ()) @@ -157,7 +167,7 @@ void ManagementAgent::PeriodicProcessing (void) SendBuffer (msgBuffer, contentSize, mExchange, routingKey); } - if (object->getConfigChanged ()) + if (object->getConfigChanged () || object->isDeleted ()) { Buffer msgBuffer (msgChars, BUFSIZE); EncodeHeader (msgBuffer); diff --git a/cpp/src/qpid/management/ManagementAgent.h b/cpp/src/qpid/management/ManagementAgent.h index c33a59adff..a4f10632da 100644 --- a/cpp/src/qpid/management/ManagementAgent.h +++ b/cpp/src/qpid/management/ManagementAgent.h @@ -25,6 +25,7 @@ #include "qpid/Options.h" #include "qpid/broker/Exchange.h" #include "qpid/broker/Timer.h" +#include "qpid/sys/Mutex.h" #include "ManagementObject.h" #include <boost/shared_ptr.hpp> @@ -41,11 +42,12 @@ class ManagementAgent typedef boost::shared_ptr<ManagementAgent> shared_ptr; + static void enableManagement (void); static shared_ptr getAgent (void); void setInterval (uint16_t _interval) { interval = _interval; } - void setExchange (broker::Exchange::shared_ptr mgmtExchange, - broker::Exchange::shared_ptr directExchange); + void setExchange (broker::Exchange::shared_ptr mgmtExchange, + broker::Exchange::shared_ptr directExchange); void addObject (ManagementObject::shared_ptr object); void clientAdded (void); void dispatchCommand (broker::Deliverable& msg, @@ -64,6 +66,9 @@ class ManagementAgent }; static shared_ptr agent; + static bool enabled; + + qpid::sys::RWlock userLock; ManagementObjectMap managementObjects; broker::Timer timer; broker::Exchange::shared_ptr mExchange; diff --git a/cpp/src/qpid/management/ManagementExchange.cpp b/cpp/src/qpid/management/ManagementExchange.cpp index f18b6fc402..ee18f026e7 100644 --- a/cpp/src/qpid/management/ManagementExchange.cpp +++ b/cpp/src/qpid/management/ManagementExchange.cpp @@ -27,13 +27,14 @@ using namespace qpid::broker; using namespace qpid::framing; using namespace qpid::sys; -ManagementExchange::ManagementExchange (const string& _name) : - Exchange (_name), TopicExchange(_name) {} +ManagementExchange::ManagementExchange (const string& _name, Manageable* _parent) : + Exchange (_name, _parent), TopicExchange(_name, _parent) {} ManagementExchange::ManagementExchange (const std::string& _name, bool _durable, - const FieldTable& _args) : - Exchange (_name, _durable, _args), - TopicExchange(_name, _durable, _args) {} + const FieldTable& _args, + Manageable* _parent) : + Exchange (_name, _durable, _args, _parent), + TopicExchange(_name, _durable, _args, _parent) {} bool ManagementExchange::bind (Queue::shared_ptr queue, diff --git a/cpp/src/qpid/management/ManagementExchange.h b/cpp/src/qpid/management/ManagementExchange.h index 6ccdf47182..0fcd65b092 100644 --- a/cpp/src/qpid/management/ManagementExchange.h +++ b/cpp/src/qpid/management/ManagementExchange.h @@ -35,9 +35,10 @@ class ManagementExchange : public virtual TopicExchange public: static const std::string typeName; - ManagementExchange (const string& name); + ManagementExchange (const string& name, Manageable* _parent = 0); ManagementExchange (const string& _name, bool _durable, - const qpid::framing::FieldTable& _args); + const qpid::framing::FieldTable& _args, + Manageable* _parent = 0); virtual std::string getType() const { return typeName; } |
