From 7f883c0ec15f98b6c1607091f1edd8605f6bc223 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn?= Date: Fri, 14 May 2010 19:22:54 +0200 Subject: [PATCH] feature #212: Host extended information is now loaded from ONE core. --- src/scheduler/include/HostPoolXML.h | 6 +-- src/scheduler/include/HostXML.h | 2 +- src/scheduler/src/pool/HostPoolXML.cc | 53 +++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 6 deletions(-) diff --git a/src/scheduler/include/HostPoolXML.h b/src/scheduler/include/HostPoolXML.h index dfff8f7b23..c0fc31a972 100644 --- a/src/scheduler/include/HostPoolXML.h +++ b/src/scheduler/include/HostPoolXML.h @@ -49,11 +49,7 @@ protected: return get_nodes("/HOST_POOL/HOST[STATE<3]", content); }; - virtual void add_object(xmlNodePtr node) - { - HostXML* host = new HostXML(node); - objects.insert( pair(host->get_hid(), host) ); - }; + virtual void add_object(xmlNodePtr node); virtual int load_info(xmlrpc_c::value &result); }; diff --git a/src/scheduler/include/HostXML.h b/src/scheduler/include/HostXML.h index d1bba8f004..18f4b97939 100644 --- a/src/scheduler/include/HostXML.h +++ b/src/scheduler/include/HostXML.h @@ -26,7 +26,7 @@ class HostXML : public ObjectXML { public: - HostXML(const xmlNodePtr node):ObjectXML(node) + HostXML(const string &xml_doc):ObjectXML(xml_doc) { init_attributes(); }; diff --git a/src/scheduler/src/pool/HostPoolXML.cc b/src/scheduler/src/pool/HostPoolXML.cc index 86a9ff914f..ddaccb64ce 100644 --- a/src/scheduler/src/pool/HostPoolXML.cc +++ b/src/scheduler/src/pool/HostPoolXML.cc @@ -45,6 +45,59 @@ int HostPoolXML::set_up() /* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */ +void HostPoolXML::add_object(xmlNodePtr node) +{ + if ( node == 0 || node->children == 0 ) + { + NebulaLog::log("HOST",Log::ERROR, + "XML Node does not represent a valid Host"); + + return; + } + + xmlChar * str_ptr = xmlNodeGetContent(node->children); + istringstream iss(reinterpret_cast(str_ptr)); + + int hid; + xmlrpc_c::value result; + + iss >> hid; + xmlFree(str_ptr); + + client->call(client->get_endpoint(), // serverUrl + "one.host.info", // methodName + "si", // arguments format + &result, // resultP + client->get_oneauth().c_str(), // argument 0 + hid); // argument 1 + + vector values = + xmlrpc_c::value_array(result).vectorValueValue(); + + bool success = xmlrpc_c::value_boolean( values[0] ); + string message = xmlrpc_c::value_string( values[1] ); + + if( !success ) + { + ostringstream oss; + + oss << "ONE returned error while retrieving info for Host " << hid; + oss << ":" << endl; + oss << message; + + NebulaLog::log("HOST",Log::ERROR,oss); + } + else + { + HostXML* host = new HostXML( message ); + + objects.insert( pair(hid, host) ); + } +} + +/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ + int HostPoolXML::load_info(xmlrpc_c::value &result) { try