[Ovirt-devel] [PATCH matahari] Moved the follow platform details to the Platform class to keep the details abstract and platform-independent:
Darryl L. Pierce
dpierce at redhat.com
Wed May 19 21:00:12 UTC 2010
* UUID
* hostname
* hardware architecture
* total system memory
* hypervisor
Signed-off-by: Darryl L. Pierce <dpierce at redhat.com>
---
src/host.cpp | 61 ++++-------------------------------------------
src/linux_platform.cpp | 58 +++++++++++++++++++++++++++++++++++++++++----
src/platform.h | 37 ++++++++++++++++++++++++----
3 files changed, 90 insertions(+), 66 deletions(-)
diff --git a/src/host.cpp b/src/host.cpp
index 34d4550..b9b4a7f 100644
--- a/src/host.cpp
+++ b/src/host.cpp
@@ -19,10 +19,7 @@
#include <fstream>
-#include <libvirt/libvirt.h>
#include <qpid/management/Manageable.h>
-#include <sys/sysinfo.h>
-#include <sys/utsname.h>
#include "host.h"
#include "platform.h"
@@ -51,58 +48,12 @@ HostAgent::setup(ManagementAgent* agent)
iter->setup(agent, this);
}
- struct utsname details;
- string uuid = "Unknown";
- string hostname = "Unknown";
- string hypervisor = "Unknown";
- string architecture = "None";
- unsigned long memory = 0;
- bool beeping = false;
-
- ifstream input("/var/lib/dbus/machine-id");
-
- if(input.is_open())
- {
- getline(input, uuid);
- input.close();
- }
-
- if(!uname(&details))
- {
- hostname = string(details.nodename);
- architecture = string(details.machine);
- }
- else
- {
- throw runtime_error("Unable to retrieve system details");
- }
-
- virConnectPtr lvconn = virConnectOpenReadOnly(NULL);
-
- if(lvconn)
- {
- hypervisor = string(virConnectGetType(lvconn));
- virConnectClose(lvconn);
- }
-
- struct sysinfo sysinf;
- if(!sysinfo(&sysinf))
- {
- memory = sysinf.totalram / 1024L;
- }
- else
- {
- throw runtime_error("Unable to retrieve system memory details.");
- }
-
- cout << "memory: " << memory << endl;
-
- management_object->set_uuid(uuid);
- management_object->set_hostname(hostname);
- management_object->set_hypervisor(hypervisor);
- management_object->set_arch(architecture);
- management_object->set_memory(memory);
- management_object->set_beeping(beeping);
+ management_object->set_uuid(Platform::instance()->getUUID());
+ management_object->set_hostname(Platform::instance()->getHostname());
+ management_object->set_hypervisor(Platform::instance()->getHypervisor());
+ management_object->set_arch(Platform::instance()->getArchitecture());
+ management_object->set_memory(Platform::instance()->getMemory());
+ management_object->set_beeping(false);
}
void
diff --git a/src/linux_platform.cpp b/src/linux_platform.cpp
index fbcfdb9..805f071 100644
--- a/src/linux_platform.cpp
+++ b/src/linux_platform.cpp
@@ -21,11 +21,14 @@
#include <iomanip>
#include <iostream>
#include <dirent.h>
+#include <libvirt/libvirt.h>
#include <net/if.h>
#include <pcre.h>
#include <stdexcept>
#include <string.h>
#include <sys/ioctl.h>
+#include <sys/sysinfo.h>
+#include <sys/utsname.h>
// TODO remove this wrapper once rhbz#583747 is fixed
extern "C" {
@@ -39,6 +42,50 @@ LinuxPlatform::LinuxPlatform()
int core_count = 0;
string model = "unknown";
+ string uuid;
+ ifstream* input;
+
+ input = new ifstream("/var/lib/dbus/machine-id");
+
+ if(input->is_open())
+ {
+ getline(*input, uuid);
+ input->close();
+ this->setUUID(uuid);
+ }
+ input->close();
+ delete input;
+
+ struct utsname details;
+
+ if(!uname(&details))
+ {
+ this->setHostname(string(details.nodename));
+ this->setArchitecture(string(details.machine));
+ }
+ else
+ {
+ throw runtime_error("Unable to retrieve system details");
+ }
+
+ virConnectPtr lvconn = virConnectOpenReadOnly(NULL);
+
+ if(lvconn)
+ {
+ this->setHypervisor(string(virConnectGetType(lvconn)));
+ virConnectClose(lvconn);
+ }
+
+ struct sysinfo sysinf;
+ if(!sysinfo(&sysinf))
+ {
+ this->setMemory(sysinf.totalram / 1024L);
+ }
+ else
+ {
+ throw runtime_error("Unable to retrieve system memory details.");
+ }
+
struct udev* udev = udev_new();
struct udev_enumerate* enumerator = udev_enumerate_new(udev);
@@ -58,8 +105,8 @@ LinuxPlatform::LinuxPlatform()
udev_enumerate_unref(enumerator);
udev_unref(udev);
- ifstream input("/proc/cpuinfo");
- if(input.is_open())
+ input = new ifstream("/proc/cpuinfo");
+ if(input->is_open())
{
string regexstr = "(.*\\S)\\s*:\\s*(\\S.*)";
int expected = 3;
@@ -73,11 +120,11 @@ LinuxPlatform::LinuxPlatform()
regex = pcre_compile(regexstr.c_str(), 0, &pcre_error, &pcre_error_offset, NULL);
if(!regex) { throw runtime_error("Unable to compile regular expression."); }
- while(!input.eof() && !done)
+ while(!input->eof() && !done)
{
string line;
- getline(input, line);
+ getline(*input, line);
int match = pcre_exec(regex, NULL, line.c_str(), line.length(),
0, PCRE_NOTEMPTY,found, expected * 3);
@@ -104,7 +151,8 @@ LinuxPlatform::LinuxPlatform()
}
}
}
- input.close();
+ input->close();
+ delete input;
}
}
diff --git a/src/platform.h b/src/platform.h
index 54fbe37..1a976a6 100644
--- a/src/platform.h
+++ b/src/platform.h
@@ -37,25 +37,50 @@ class Platform
private:
static Platform* _instance;
- string processor_model;
- unsigned int number_of_cores;
+ string _uuid;
+ string _hostname;
+ string _architecture;
+ string _hypervisor;
+ unsigned long _memory;
+ string _processor_model;
+ unsigned int _number_of_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 setUUID(const string uuid) { _uuid = uuid; }
+ void setHostname(const string hostname) { _hostname = hostname; }
+ void setArchitecture(const string arch) { _architecture = arch; }
+ void setHypervisor(const string hypervisor) { _hypervisor = hypervisor; }
+ void setMemory(const unsigned long memory) { _memory = memory; }
+ void set_processor_model(const string model) { _processor_model = model; }
+ void set_number_of_cores(const int number) { _number_of_cores = number; }
public:
// the singleton instance
static Platform* instance();
+ // returns the UUID for the installation
+ string getUUID() const { return _uuid; }
+
+ // returns the fully qualified hostname
+ string getHostname() const { return _hostname; }
+
+ // returns the system architecture
+ string getArchitecture() const { return _architecture; }
+
+ // returns the hypervisor
+ string getHypervisor() const { return _hypervisor; }
+
+ // returns the total system memory
+ unsigned long getMemory() const { return _memory; }
+
// returns text describing the processor model.
- string get_processor_model() const { return processor_model; }
+ string get_processor_model() const { return _processor_model; }
// returns the number of cores in the processor.
- int get_number_of_cores() const { return number_of_cores; }
+ int get_number_of_cores() const { return _number_of_cores; }
// returns the load average for the platform
virtual double get_load_average() const = 0;
--
1.6.6.1
More information about the ovirt-devel
mailing list