Darryl L. Pierce
2010-May-24 12:33 UTC
[Ovirt-devel] [PATCH matahari] Moves the CPU properties into the Host API space.
There was no valid reason to keep this set of APIs in their own agent and class, so those have been eliminated. A new HostListener method, HostListener::updated(), was added. It is via this method that the Host will notify all transports that the load average statistic is updated on the host. Signed-off-by: Darryl L. Pierce <dpierce at redhat.com> --- src/Makefile.am | 11 +------ src/host.cpp | 33 +++++++++++++++++----- src/host.h | 10 ++++--- src/hostlistener.h | 1 + src/linux_platform.cpp | 10 +++--- src/linux_platform.h | 2 +- src/main.cpp | 3 -- src/platform.h | 18 +++++------- src/processors.cpp | 63 ------------------------------------------- src/processors.h | 46 ------------------------------- src/processorslistener.h | 29 ------------------- src/qmf/hostagent.cpp | 9 ++++++ src/qmf/hostagent.h | 1 + src/qmf/processorsagent.cpp | 49 --------------------------------- src/qmf/processorsagent.h | 50 ---------------------------------- src/schema.xml | 16 +++++------ 16 files changed, 64 insertions(+), 287 deletions(-) delete mode 100644 src/processors.cpp delete mode 100644 src/processors.h delete mode 100644 src/processorslistener.h delete mode 100644 src/qmf/processorsagent.cpp delete mode 100644 src/qmf/processorsagent.h diff --git a/src/Makefile.am b/src/Makefile.am index 498ee72..7daea07 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -9,9 +9,7 @@ generated_file_list = \ qmf/com/redhat/matahari/NetworkDevice.cpp \ qmf/com/redhat/matahari/NetworkDevice.h \ qmf/com/redhat/matahari/Package.cpp \ - qmf/com/redhat/matahari/Package.h \ - qmf/com/redhat/matahari/Processors.cpp \ - qmf/com/redhat/matahari/Processors.h + qmf/com/redhat/matahari/Package.h nodist_matahari_SOURCES = $(generated_file_list) $(first) @@ -26,13 +24,8 @@ matahari_SOURCES = \ networkdevice.h \ platform.cpp \ platform.h \ - processors.cpp \ - processors.h \ - processorslistener.h \ qmf/hostagent.cpp \ - qmf/hostagent.h \ - qmf/processorsagent.cpp \ - qmf/processorsagent.h + qmf/hostagent.h $(generated_file_list): $(generated_file_list) diff --git a/src/host.cpp b/src/host.cpp index 29b84ec..6d9a1fe 100644 --- a/src/host.cpp +++ b/src/host.cpp @@ -99,14 +99,19 @@ Host::setup(ManagementAgent* agent, HostAgent* hostAgent) void Host::update() { - _processors.update(); - for(vector<NetworkDeviceAgent>::iterator iter = _networkdevices.begin(); iter != _networkdevices.end(); iter++) { iter->update(); } + + for(set<HostListener*>::iterator iter = _listeners.begin(); + iter != _listeners.end(); + iter++) + { + (*iter)->updated(); + } } void @@ -121,12 +126,6 @@ Host::removeHostListener(HostListener* listener) _listeners.erase(listener); } -Processors& -Host::getProcessors() -{ - return _processors; -} - string Host:: getUUID() const { @@ -163,6 +162,24 @@ Host::isBeeping() const return _beeping; } +string +Host::getCPUModel() const +{ + return Platform::instance()->getCPUModel(); +} + +unsigned int +Host::getNumberOfCPUCores() const +{ + return Platform::instance()->getNumberOfCPUCores(); +} + +double +Host::getLoadAverage() const +{ + return Platform::instance()->getLoadAverage(); +} + void Host::identify(const int iterations) { diff --git a/src/host.h b/src/host.h index bcb8c12..f21c86c 100644 --- a/src/host.h +++ b/src/host.h @@ -24,7 +24,6 @@ #include <set> #include "hostlistener.h" -#include "processors.h" #include "networkdevice.h" using namespace std; @@ -42,7 +41,6 @@ class Host unsigned int _memory; bool _beeping; - Processors _processors; vector<NetworkDeviceAgent> _networkdevices; set<HostListener*> _listeners; @@ -55,14 +53,18 @@ class Host void addHostListener(HostListener*); void removeHostListener(HostListener*); - Processors& getProcessors(); - + // general host properties string getUUID() const; string getHostname() const; string getHypervisor() const; string getArchitecture() const; unsigned int getMemory() const; + // CPU properties + string getCPUModel() const; + unsigned int getNumberOfCPUCores() const; + double getLoadAverage() const; + bool isBeeping() const; void identify(const int iterations); void shutdown(); diff --git a/src/hostlistener.h b/src/hostlistener.h index 298e51d..0d09594 100644 --- a/src/hostlistener.h +++ b/src/hostlistener.h @@ -27,6 +27,7 @@ class HostListener { public: + virtual void updated() = 0; virtual void heartbeat(unsigned long timestamp) = 0; }; diff --git a/src/linux_platform.cpp b/src/linux_platform.cpp index fbcfdb9..b05a327 100644 --- a/src/linux_platform.cpp +++ b/src/linux_platform.cpp @@ -36,7 +36,7 @@ extern "C" { LinuxPlatform::LinuxPlatform() { - int core_count = 0; + int cpu_count = 0; string model = "unknown"; struct udev* udev = udev_new(); @@ -50,9 +50,9 @@ LinuxPlatform::LinuxPlatform() udev_list_entry_foreach(entry, entries) { - core_count++; + cpu_count++; } - set_number_of_cores(core_count); + setNumberOfCPUCores(cpu_count); } udev_enumerate_unref(enumerator); @@ -100,7 +100,7 @@ LinuxPlatform::LinuxPlatform() } else { - if(name == "model name") set_processor_model(value); + if(name == "model name") setCPUModel(value); } } } @@ -109,7 +109,7 @@ LinuxPlatform::LinuxPlatform() } double -LinuxPlatform::get_load_average() const +LinuxPlatform::getLoadAverage() const { double load_average; ifstream input; diff --git a/src/linux_platform.h b/src/linux_platform.h index 095bc08..a66cbe4 100644 --- a/src/linux_platform.h +++ b/src/linux_platform.h @@ -32,7 +32,7 @@ class LinuxPlatform : public Platform LinuxPlatform(); virtual ~LinuxPlatform() {} - virtual double get_load_average() const; + virtual double getLoadAverage() const; virtual vector<NetworkDeviceAgent> get_network_devices() const; }; diff --git a/src/main.cpp b/src/main.cpp index f45353a..3ab4147 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -34,7 +34,6 @@ #include "host.h" #include "qmf/hostagent.h" -#include "qmf/processorsagent.h" #include "qmf/com/redhat/matahari/Package.h" @@ -82,7 +81,6 @@ main(int argc, char **argv) ManagementAgent *agent; Host host; HostAgent hostAgent(host); - ProcessorsAgent processorsAgent(host.getProcessors());; struct option opt[] = { {"help", no_argument, NULL, 'h'}, @@ -185,7 +183,6 @@ main(int argc, char **argv) // Get the info and post it to the broker hostAgent.setup(agent); - processorsAgent.setup(agent, &hostAgent); while(1) { diff --git a/src/platform.h b/src/platform.h index 54fbe37..ba70378 100644 --- a/src/platform.h +++ b/src/platform.h @@ -37,28 +37,24 @@ class Platform private: static Platform* _instance; - string processor_model; - unsigned int number_of_cores; + string _cpu_model; + unsigned int _cpu_cores; protected: Platform() {} virtual~ Platform() {} - void set_processor_model(const string model) { processor_model = model; } - void set_number_of_cores(const int number) { number_of_cores = number; } + void setCPUModel(const string model) { _cpu_model = model; } + void setNumberOfCPUCores(const int cores) { _cpu_cores = cores; } public: // the singleton instance static Platform* instance(); - // returns text describing the processor model. - string get_processor_model() const { return processor_model; } + string getCPUModel() const { return _cpu_model; } + unsigned int getNumberOfCPUCores() const { return _cpu_cores; } - // returns the number of cores in the processor. - int get_number_of_cores() const { return number_of_cores; } - - // returns the load average for the platform - virtual double get_load_average() const = 0; + virtual double getLoadAverage() const = 0; // returns the list of network devices for this platform virtual vector<NetworkDeviceAgent> get_network_devices() const = 0; diff --git a/src/processors.cpp b/src/processors.cpp deleted file mode 100644 index 1850aba..0000000 --- a/src/processors.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* processor.cpp - Copyright (C) 2010 Red Hat, Inc. - * Written by Darryl L. Pierce <dpierce at redhat.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. A copy of the GNU General Public License is - * also available at http://www.gnu.org/copyleft/gpl.html. - */ - -#include "processors.h" -#include "platform.h" - -void -Processors::addProcessorsListener(ProcessorsListener* listener) -{ - _listeners.insert(listener); -} - -void -Processors::removeProcessorsListener(ProcessorsListener* listener) -{ - _listeners.erase(listener); -} - -void -Processors::update() -{ - for(set<ProcessorsListener*>::iterator iter = _listeners.begin(); - iter != _listeners.end(); - iter++) - { - (*iter)->updated(); - } -} - -string -Processors::getModel() const -{ - return Platform::instance()->get_processor_model(); -} - - -unsigned int -Processors::getNumberOfCores() const -{ - return Platform::instance()->get_number_of_cores(); -} - -float -Processors::getLoadAverage() const -{ - return Platform::instance()->get_load_average(); -} diff --git a/src/processors.h b/src/processors.h deleted file mode 100644 index e69a6ee..0000000 --- a/src/processors.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef __PROCESSORS_H -#define __PROCESSORS_H - -/* processor.h - Copyright (C) 2010 Red Hat, Inc. - * Written by Darryl L. Pierce <dpierce at redhat.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. A copy of the GNU General Public License is - * also available at http://www.gnu.org/copyleft/gpl.html. - */ - -#include <set> -#include <string> - -#include "processorslistener.h" - -using namespace std; - -class Processors -{ - private: - set<ProcessorsListener*> _listeners; - - public: - void addProcessorsListener(ProcessorsListener* listener); - void removeProcessorsListener(ProcessorsListener* listener); - - void update(); - - string getModel() const; - unsigned int getNumberOfCores() const; - float getLoadAverage() const; -}; - -#endif diff --git a/src/processorslistener.h b/src/processorslistener.h deleted file mode 100644 index d6818c8..0000000 --- a/src/processorslistener.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef __PROCESSORSLISTENER_H -#define __PROCESSORSLISTENER_H - -/* processorslistener.h - Copyright (C) 2009 Red Hat, Inc. - * Written by Darryl Pierce <dpierce at redhat.com>. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. A copy of the GNU General Public License is - * also available at http://www.gnu.org/copyleft/gpl.html. - */ - -class ProcessorsListener -{ - public: - virtual void updated() = 0; -}; - -#endif diff --git a/src/qmf/hostagent.cpp b/src/qmf/hostagent.cpp index 9807f65..1baac73 100644 --- a/src/qmf/hostagent.cpp +++ b/src/qmf/hostagent.cpp @@ -44,6 +44,9 @@ HostAgent::setup(ManagementAgent* agent) _management_object->set_arch(_host.getArchitecture()); _management_object->set_memory(_host.getMemory()); _management_object->set_beeping(_host.isBeeping()); + + _management_object->set_cpu_model(_host.getCPUModel()); + _management_object->set_cpu_cores(_host.getNumberOfCPUCores()); } Manageable::status_t @@ -63,6 +66,12 @@ HostAgent::ManagementMethod(uint32_t method, Args& arguments, string& text) } void +HostAgent::updated() +{ + _management_object->set_load_average(_host.getLoadAverage()); +} + +void HostAgent::heartbeat(unsigned long timestamp) { } diff --git a/src/qmf/hostagent.h b/src/qmf/hostagent.h index 6d2f2a0..9d01f2c 100644 --- a/src/qmf/hostagent.h +++ b/src/qmf/hostagent.h @@ -45,6 +45,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 updated(); virtual void heartbeat(unsigned long timestamp); }; diff --git a/src/qmf/processorsagent.cpp b/src/qmf/processorsagent.cpp deleted file mode 100644 index c1703de..0000000 --- a/src/qmf/processorsagent.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* processorsagent.cpp - Copyright (C) 2009 Red Hat, Inc. - * Written by Arjun Roy <arroy at redhat.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. A copy of the GNU General Public License is - * also available at http://www.gnu.org/copyleft/gpl.html. - */ - -#include "processorsagent.h" -#include <qpid/agent/ManagementAgent.h> - -namespace _qmf = qmf::com::redhat::matahari; - -ProcessorsAgent::ProcessorsAgent(Processors& processors) - :_processors(processors) -{ - processors.addProcessorsListener(this); -} - -ProcessorsAgent::~ProcessorsAgent() -{ -} - -void -ProcessorsAgent::setup(ManagementAgent* agent, HostAgent* parent) -{ - _management_object = new _qmf::Processors(agent, this, parent); - agent->addObject(_management_object); - - _management_object->set_model(this->_processors.getModel()); - _management_object->set_cores(this->_processors.getNumberOfCores()); -} - -void -ProcessorsAgent::updated() -{ - _management_object->set_load_average(this->_processors.getLoadAverage()); -} diff --git a/src/qmf/processorsagent.h b/src/qmf/processorsagent.h deleted file mode 100644 index 1d814d4..0000000 --- a/src/qmf/processorsagent.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef __PROCESSORSAGENT_H -#define __PROCESSORSAGENT_H - -/* processoragent.h - Copyright (C) 2010 Red Hat, Inc. - * Written by Darryl L. Pierce <dpierce at redhat.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. A copy of the GNU General Public License is - * also available at http://www.gnu.org/copyleft/gpl.html. - */ - -#include <qpid/management/Manageable.h> -#include <qpid/management/ManagementObject.h> - -#include "processors.h" -#include "processorslistener.h" -#include "qmf/com/redhat/matahari/Processors.h" -#include "qmf/hostagent.h" - -using namespace qpid::management; - -class ProcessorsAgent : public Manageable, public ProcessorsListener -{ - private: - qmf::com::redhat::matahari::Processors* _management_object; - - Processors& _processors; - - public: - ProcessorsAgent(Processors& processors); - virtual ~ProcessorsAgent(); - - void setup(ManagementAgent* agent, HostAgent* parent); - ManagementObject* GetManagementObject(void) const { return _management_object; } - - virtual void updated(); -}; - -#endif diff --git a/src/schema.xml b/src/schema.xml index 206e39b..fd83ac1 100644 --- a/src/schema.xml +++ b/src/schema.xml @@ -2,6 +2,7 @@ <class name="Host"> + <!-- general properties --> <property name="uuid" type="sstr" access="RO" desc="Host UUID" index="y"/> <property name="hostname" type="sstr" access="RO" desc="Hostname"/> <property name="memory" type="int64" access="RO" desc="Amount of primary memory for host (kb)" unit="kb"/> @@ -9,20 +10,17 @@ <property name="arch" type="sstr" access="RO" desc="Architecture of host"/> <property name="beeping" type="bool" access="RW" desc="speaker beep loop active? (used to identify host)"/> + <!-- CPU properties --> + <property name="cpu_model" type="lstr" access="RO" desc="The process model description." /> + <property name="cpu_cores" type="uint8" access="RO" desc="The number of processor cores." /> + <statistic name="load_average" type="double" desc="The current processing load average." /> + + <!-- APIs --> <method name="shutdown" desc="Shutdown node" /> <method name="reboot" desc="Reboot node" /> </class> - <!-- 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" /> - <property name="model" type="lstr" access="RO" desc="The processor label." /> - <property name="cores" type="int8" access="RO" desc="The number of cores." /> - - <statistic name="load_average" type="float" desc="The processing load average." /> - </class> - <!-- represents a physical network device --> <class name="NetworkDevice"> <property name="host" type="objId" access="RC" desc="The host machine." index="y" references="Host" parentRef="y" /> -- 1.6.6.1