2010-06-30 Ramon Novoa <rnovoa@artica.es>

* windows/pandora_wmi.cc: getDiskFreeSpacePercent should not return
          any value if the drive does not exist. Fixed.

        * modules/pandora_module.h, modules/pandora_module_factory.cc,
          modules/pandora_module.cc, pandora_windows_service.cc: Added support
          for saving the value of a module as an environment variable.




git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@2935 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
Ramon Novoa 2010-06-30 15:40:25 +00:00
parent cf4de8461c
commit cdd4f87774
6 changed files with 96 additions and 16 deletions

View File

@ -1,3 +1,11 @@
2010-06-30 Ramon Novoa <rnovoa@artica.es>
* windows/pandora_wmi.cc: getDiskFreeSpacePercent should not return
any value if the drive does not exist. Fixed.
* modules/pandora_module.h, modules/pandora_module_factory.cc,
modules/pandora_module.cc, pandora_windows_service.cc: Added support
for saving the value of a module as an environment variable.
2010-06-13 Sancho Lerena <slerena@artica.es>

View File

@ -273,6 +273,36 @@ Pandora_Module::getDataOutput (Pandora_Data *data) {
return trim (data->getValue ());
}
/**
* Export the module output to en environment variable.
*/
void
Pandora_Module::exportDataOutput () {
Pandora_Data *pandora_data = NULL;
string putenv_str, module_data;
/* putenv expects a string of the form name=value */
putenv_str = this->save + "=";
/* No data */
if ( (!this->has_output) || this->data_list == NULL) {
putenv (putenv_str.c_str ());
return;
}
/* Get the module data */
pandora_data = data_list->front ();
if (pandora_data == NULL) {
putenv (putenv_str.c_str ());
return;
}
module_data = pandora_data->getValue ();
putenv_str += module_data;
/* Save it as an environment variable */
putenv (putenv_str.c_str ());
}
/**
* Set the output of the module.
*
@ -544,3 +574,23 @@ void
Pandora_Module::setDescription (string description) {
this->module_description = description;
}
/**
* Set the name of the environment variable where the module data will be saved.
*
* @param save Name of the environment variable.
*/
void
Pandora_Module::setSave (string save) {
this->save = save;
}
/**
* Get the name of the environment variable where the module data will be saved.
*
* @return The name of the environment variable.
*/
string
Pandora_Module::getSave () {
return this->save;
}

View File

@ -139,6 +139,7 @@ namespace Pandora_Modules {
Module_Type module_type;
string module_kind_str;
Module_Kind module_kind;
string save;
protected:
@ -191,7 +192,8 @@ namespace Pandora_Modules {
int getInterval ();
void setTimeout (int timeout);
int getTimeout ();
string getSave ();
virtual string getXml ();
@ -209,13 +211,16 @@ namespace Pandora_Modules {
Module_Type getTypeInt () const;
Module_Type getModuleType () const;
Module_Kind getModuleKind () const;
void setType (string type);
void setKind (string kind);
void setDescription (string description);
void setMax (int value);
void setMin (int value);
void setAsync (bool async);
void setSave (string save);
void exportDataOutput ();
};
}

View File

@ -80,6 +80,7 @@ using namespace Pandora_Strutils;
#define TOKEN_TIMEOUT ("module_timeout ")
#define TOKEN_REGEXP ("module_regexp ")
#define TOKEN_PLUGIN ("module_plugin ")
#define TOKEN_SAVE ("module_save ")
string
parseLine (string line, string token) {
@ -122,7 +123,7 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
string module_retries, module_startdelay, module_retrydelay;
string module_perfcounter, module_tcpcheck;
string module_port, module_timeout, module_regexp;
string module_plugin;
string module_plugin, module_save;
Pandora_Module *module;
bool numeric;
Module_Type type;
@ -159,6 +160,7 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
module_timeout = "";
module_regexp = "";
module_plugin = "";
module_save = "";
stringtok (tokens, definition, "\n");
@ -280,6 +282,9 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
if (module_plugin == "") {
module_plugin = parseLine (line, TOKEN_PLUGIN);
}
if (module_save == "") {
module_save = parseLine (line, TOKEN_SAVE);
}
iter++;
}
@ -378,6 +383,10 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
if (module_description != "") {
module->setDescription (module_description);
}
if (module_save != "") {
module->setSave (module_save);
}
if (module_async != "") {
module->setAsync (true);

View File

@ -570,7 +570,7 @@ Pandora_Windows_Service::checkConfig () {
int i, conf_size;
char *conf_str = NULL, *remote_conf_str = NULL, *remote_conf_md5 = NULL;
char agent_md5[33], conf_md5[33], flag;
string conf_file, conf_tmp_file, md5_tmp_file, temp_dir, tmp;
string agent_name, conf_file, conf_tmp_file, md5_tmp_file, temp_dir, tmp;
tmp = conf->getValue ("remote_config");
if (tmp != "1") {
@ -590,9 +590,16 @@ Pandora_Windows_Service::checkConfig () {
/* Get agent name */
tmp = conf->getValue ("agent_name");
if (tmp == "") {
if (tmp.empty ()) {
tmp = Pandora_Windows_Info::getSystemName ();
}
agent_name = tmp;
/* Error getting agent name */
if (tmp.empty ()) {
pandoraDebug ("Pandora_Windows_Service::checkConfig: Error getting agent name");
return;
}
Pandora_File::md5 (tmp.c_str(), tmp.size(), agent_md5);
@ -675,7 +682,7 @@ Pandora_Windows_Service::checkConfig () {
return;
}
pandoraLog("Pandora_Windows_Service::checkConfig: Configuration has changed");
pandoraLog("Pandora_Windows_Service::checkConfig: Configuration for agent %s has changed", agent_name.c_str ());
/* Get configuration file from server */
try {
@ -849,7 +856,12 @@ Pandora_Windows_Service::pandora_run () {
pandoraDebug ("Run %s", module->getName ().c_str ());
module->run ();
/* Save module data to an environment variable */
if (!module->getSave().empty ()) {
module->exportDataOutput ();
}
this->modules->goNext ();
}
}

View File

@ -183,7 +183,6 @@ Pandora_Wmi::getDiskFreeSpacePercent (string disk_id) {
CDhInitialize init;
CDispPtr wmi_svc, quickfixes;
double free_space = 0, size = 0;
double total_free_space = 0, total_size = 0;
string query;
query = "SELECT Size, FreeSpace FROM Win32_LogicalDisk WHERE DeviceID = \"" + disk_id + "\"";
@ -200,15 +199,12 @@ Pandora_Wmi::getDiskFreeSpacePercent (string disk_id) {
dhGetValue (L"%e", &size, quickfix,
L".Size");
total_free_space += free_space;
total_size += size;
if (size == 0) {
return 0;
}
return (unsigned long) (free_space * 100 / size);
} NEXT_THROW (quickfix);
if (total_size == 0) {
return 0;
}
return (unsigned long) (total_free_space * 100 / total_size);
} catch (string errstr) {
pandoraLog ("getDiskFreeSpace error. %s", errstr.c_str ());
}