[Ovirt-devel] [Matahari] [PATCH matahari] Introduces explicit heartbeat events to the QMF transport.
Andrew Beekhof
abeekhof at redhat.com
Fri May 28 09:31:19 UTC 2010
ack
On May 27, 2010, at 8:19 PM, Darryl L. Pierce wrote:
> 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
>
> _______________________________________________
> Matahari mailing list
> Matahari at lists.fedorahosted.org
> https://fedorahosted.org/mailman/listinfo/matahari
More information about the ovirt-devel
mailing list