This patch supercedes the previous one, introducing a heartbeat sequence in the API. It also includes a change to the linking to accomodate changes to qpid.
Darryl L. Pierce
2010-May-27 18:19 UTC
[Ovirt-devel] [PATCH matahari] Introduces explicit heartbeat events to the QMF transport.
Also changes the linking to include the two newer qpid libraries. Signed-off-by: Darryl L. Pierce <dpierce at redhat.com> --- src/Makefile.am | 4 +++- src/host.cpp | 28 ++++++++++++++++++---------- src/host.h | 1 + src/hostlistener.h | 2 +- src/qmf/hostagent.cpp | 7 +++++-- src/qmf/hostagent.h | 9 ++++++--- src/schema.xml | 7 +++++++ 7 files changed, 41 insertions(+), 17 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 498ee72..eaad138 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -5,6 +5,8 @@ sbin_PROGRAMS = matahari first = qmf/com/redhat/matahari/Host.cpp generated_file_list = \ + qmf/com/redhat/matahari/EventHeartbeat.cpp \ + qmf/com/redhat/matahari/EventHeartbeat.h \ qmf/com/redhat/matahari/Host.h \ qmf/com/redhat/matahari/NetworkDevice.cpp \ qmf/com/redhat/matahari/NetworkDevice.h \ @@ -44,6 +46,6 @@ CLEANFILES = $(generated_file_list) $(first) matahari_CPPFLAGS = -fno-strict-aliasing matahari_LDFLAGS = -L/usr/local/lib -matahari_LDADD = -lqmf $(LIBVIRT_LIBS) $(PCRE_LIBS) $(UDEV_LIBS) +matahari_LDADD = -lqmf -lqpidclient -lqpidcommon $(LIBVIRT_LIBS) $(PCRE_LIBS) $(UDEV_LIBS) dist_pkgdata_DATA = schema.xml diff --git a/src/host.cpp b/src/host.cpp index 29b84ec..63dbceb 100644 --- a/src/host.cpp +++ b/src/host.cpp @@ -29,16 +29,18 @@ using namespace std; +const string UNKNOWN("Unknow"); + Host::Host() + :_uuid(UNKNOWN) + ,_hostname(UNKNOWN) + ,_hypervisor(UNKNOWN) + ,_architecture(UNKNOWN) + ,_memory(0) + ,_beeping(false) + ,_heartbeat_sequence(0) { struct utsname details; - this->_uuid = string("Unknown"); - this->_hostname = string("Unknown"); - this->_hypervisor = string("Unknown"); - this->_architecture = string("None"); - this->_memory = 0; - this->_beeping = false; - std::ifstream input("/var/lib/dbus/machine-id"); if(input.is_open()) @@ -99,13 +101,19 @@ Host::setup(ManagementAgent* agent, HostAgent* hostAgent) void Host::update() { + this->_heartbeat_sequence++; + _processors.update(); - for(vector<NetworkDeviceAgent>::iterator iter = _networkdevices.begin(); - iter != _networkdevices.end(); + time_t __time; + time(&__time); + + for(set<HostListener*>::iterator iter = _listeners.begin(); + iter != _listeners.end(); iter++) { - iter->update(); + (*iter)->heartbeat((unsigned long)__time, + this->_heartbeat_sequence); } } diff --git a/src/host.h b/src/host.h index bcb8c12..b6885e8 100644 --- a/src/host.h +++ b/src/host.h @@ -41,6 +41,7 @@ class Host string _architecture; unsigned int _memory; bool _beeping; + unsigned int _heartbeat_sequence; Processors _processors; vector<NetworkDeviceAgent> _networkdevices; diff --git a/src/hostlistener.h b/src/hostlistener.h index 298e51d..de7352a 100644 --- a/src/hostlistener.h +++ b/src/hostlistener.h @@ -27,7 +27,7 @@ class HostListener { public: - virtual void heartbeat(unsigned long timestamp) = 0; + virtual void heartbeat(unsigned long timestamp, unsigned int sequence) = 0; }; #endif diff --git a/src/qmf/hostagent.cpp b/src/qmf/hostagent.cpp index 9807f65..21e377b 100644 --- a/src/qmf/hostagent.cpp +++ b/src/qmf/hostagent.cpp @@ -20,7 +20,7 @@ #include "hostagent.h" #include <qpid/agent/ManagementAgent.h> -namespace _qmf = qmf::com::redhat::matahari; +#include "qmf/com/redhat/matahari/EventHeartbeat.h" HostAgent::HostAgent(Host& host) :_host(host) @@ -35,6 +35,8 @@ HostAgent::~HostAgent() void HostAgent::setup(ManagementAgent* agent) { + this->_agent = agent; + _management_object = new _qmf::Host(agent, this); agent->addObject(_management_object); @@ -63,6 +65,7 @@ HostAgent::ManagementMethod(uint32_t method, Args& arguments, string& text) } void -HostAgent::heartbeat(unsigned long timestamp) +HostAgent::heartbeat(unsigned long timestamp, unsigned int sequence) { + this->_agent->raiseEvent(_qmf::EventHeartbeat(timestamp, sequence)); } diff --git a/src/qmf/hostagent.h b/src/qmf/hostagent.h index 6d2f2a0..a31f844 100644 --- a/src/qmf/hostagent.h +++ b/src/qmf/hostagent.h @@ -31,11 +31,14 @@ using namespace qpid::management; using namespace std; +namespace _qmf = qmf::com::redhat::matahari; + class HostAgent : public Manageable, public HostListener { private: - qmf::com::redhat::matahari::Host* _management_object; - Host& _host; + _qmf::Host* _management_object; + Host& _host; + ManagementAgent* _agent; public: HostAgent(Host& host); @@ -45,7 +48,7 @@ class HostAgent : public Manageable, public HostListener ManagementObject* GetManagementObject() const { return _management_object; } status_t ManagementMethod(uint32_t method, Args& arguments, string& text); - virtual void heartbeat(unsigned long timestamp); + virtual void heartbeat(unsigned long timestamp, unsigned int sequence); }; #endif diff --git a/src/schema.xml b/src/schema.xml index 206e39b..aac5425 100644 --- a/src/schema.xml +++ b/src/schema.xml @@ -14,6 +14,13 @@ </class> + <eventArguments> + <arg name="timestamp" type="absTime" /> + <arg name="sequence" type="uint32" /> + </eventArguments> + + <event name="heartbeat" args="timestamp,sequence" /> + <!-- The processor for the node. --> <class name="Processors"> <property name="host" type="objId" access="RC" desc="The host machine." index="y" references="Host" parentRef="y" /> -- 1.7.0.1