Merge branch '7248-11618-r-works-rendimiento-module_plugin-en-agente-windows' into 'develop'
Add support for module_wait_timeout. See merge request artica/pandorafms!4073
This commit is contained in:
commit
9790be4f90
|
@ -81,6 +81,7 @@ Pandora_Module::Pandora_Module (string name) {
|
||||||
this->module_ff_type = "";
|
this->module_ff_type = "";
|
||||||
this->module_alert_template = "";
|
this->module_alert_template = "";
|
||||||
this->module_crontab = "";
|
this->module_crontab = "";
|
||||||
|
this->module_wait_timeout = 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1722,3 +1723,18 @@ Pandora_Module::isIntensive () {
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the WaitForSingleObject timeout.
|
||||||
|
*
|
||||||
|
* @param timeout Timeout in milliseconds.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
Pandora_Module::setWaitTimeout (int timeout) {
|
||||||
|
|
||||||
|
if (timeout < 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this->module_wait_timeout = timeout;
|
||||||
|
}
|
||||||
|
|
|
@ -216,6 +216,7 @@ namespace Pandora_Modules {
|
||||||
|
|
||||||
string getDataOutput (Pandora_Data *data);
|
string getDataOutput (Pandora_Data *data);
|
||||||
void cleanDataList ();
|
void cleanDataList ();
|
||||||
|
int module_wait_timeout;
|
||||||
public:
|
public:
|
||||||
Pandora_Module (string name);
|
Pandora_Module (string name);
|
||||||
virtual ~Pandora_Module ();
|
virtual ~Pandora_Module ();
|
||||||
|
@ -231,6 +232,7 @@ namespace Pandora_Modules {
|
||||||
int getInterval ();
|
int getInterval ();
|
||||||
int getIntensiveInterval ();
|
int getIntensiveInterval ();
|
||||||
void setTimeout (int timeout);
|
void setTimeout (int timeout);
|
||||||
|
void setWaitTimeout (int timeout);
|
||||||
int getTimeout ();
|
int getTimeout ();
|
||||||
string getSave ();
|
string getSave ();
|
||||||
bool getAsync ();
|
bool getAsync ();
|
||||||
|
|
|
@ -172,7 +172,7 @@ Pandora_Module_Exec::run () {
|
||||||
|
|
||||||
string output;
|
string output;
|
||||||
int tickbase = GetTickCount();
|
int tickbase = GetTickCount();
|
||||||
while ( (dwRet = WaitForSingleObject (pi.hProcess, 500)) != WAIT_ABANDONED ) {
|
while ( (dwRet = WaitForSingleObject (pi.hProcess, this->module_wait_timeout)) != WAIT_ABANDONED ) {
|
||||||
PeekNamedPipe (out_read, buffer, BUFSIZE, &read, &avail, NULL);
|
PeekNamedPipe (out_read, buffer, BUFSIZE, &read, &avail, NULL);
|
||||||
if (avail > 0) {
|
if (avail > 0) {
|
||||||
ReadFile (out_read, buffer, BUFSIZE, &read, NULL);
|
ReadFile (out_read, buffer, BUFSIZE, &read, NULL);
|
||||||
|
@ -180,11 +180,6 @@ Pandora_Module_Exec::run () {
|
||||||
output += (char *) buffer;
|
output += (char *) buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Change the output encoding */
|
|
||||||
if (this->native_encoding != -1){
|
|
||||||
changeOutputEncoding(&output);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dwRet == WAIT_OBJECT_0) {
|
if (dwRet == WAIT_OBJECT_0) {
|
||||||
break;
|
break;
|
||||||
} else if(this->getTimeout() < GetTickCount() - tickbase) {
|
} else if(this->getTimeout() < GetTickCount() - tickbase) {
|
||||||
|
@ -220,6 +215,10 @@ Pandora_Module_Exec::run () {
|
||||||
}
|
}
|
||||||
// Command output mode
|
// Command output mode
|
||||||
else if (!output.empty()) {
|
else if (!output.empty()) {
|
||||||
|
/* Change the output encoding */
|
||||||
|
if (this->native_encoding != -1){
|
||||||
|
changeOutputEncoding(&output);
|
||||||
|
}
|
||||||
this->setOutput (output);
|
this->setOutput (output);
|
||||||
} else {
|
} else {
|
||||||
this->setOutput ("");
|
this->setOutput ("");
|
||||||
|
@ -471,4 +470,3 @@ void Pandora_Module_Exec::changeOutputEncoding(string * string_change){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -124,6 +124,7 @@ using namespace Pandora_Strutils;
|
||||||
#define TOKEN_NATIVE_ENCODING ("module_native_encoding")
|
#define TOKEN_NATIVE_ENCODING ("module_native_encoding")
|
||||||
#define TOKEN_ALERT_TEMPLATE ("module_alert_template")
|
#define TOKEN_ALERT_TEMPLATE ("module_alert_template")
|
||||||
#define TOKEN_USER_SESSION ("module_user_session ")
|
#define TOKEN_USER_SESSION ("module_user_session ")
|
||||||
|
#define TOKEN_WAIT_TIMEOUT ("module_wait_timeout ")
|
||||||
|
|
||||||
string
|
string
|
||||||
parseLine (string line, string token) {
|
parseLine (string line, string token) {
|
||||||
|
@ -178,7 +179,7 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
|
||||||
string module_critical_instructions, module_warning_instructions, module_unknown_instructions, module_tags;
|
string module_critical_instructions, module_warning_instructions, module_unknown_instructions, module_tags;
|
||||||
string module_critical_inverse, module_warning_inverse, module_quiet, module_ff_interval;
|
string module_critical_inverse, module_warning_inverse, module_quiet, module_ff_interval;
|
||||||
string module_native_encoding, module_alert_template, module_ff_type;
|
string module_native_encoding, module_alert_template, module_ff_type;
|
||||||
string macro;
|
string macro, module_wait_timeout;
|
||||||
Pandora_Module *module;
|
Pandora_Module *module;
|
||||||
bool numeric;
|
bool numeric;
|
||||||
Module_Type type;
|
Module_Type type;
|
||||||
|
@ -260,6 +261,7 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
|
||||||
module_alert_template = "";
|
module_alert_template = "";
|
||||||
module_user_session = "";
|
module_user_session = "";
|
||||||
macro = "";
|
macro = "";
|
||||||
|
module_wait_timeout = "";
|
||||||
|
|
||||||
stringtok (tokens, definition, "\n");
|
stringtok (tokens, definition, "\n");
|
||||||
|
|
||||||
|
@ -291,6 +293,9 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
|
||||||
if (module_exec == "") {
|
if (module_exec == "") {
|
||||||
module_exec = parseLine (line, TOKEN_EXEC);
|
module_exec = parseLine (line, TOKEN_EXEC);
|
||||||
}
|
}
|
||||||
|
if (module_wait_timeout == "") {
|
||||||
|
module_wait_timeout = parseLine (line, TOKEN_WAIT_TIMEOUT);
|
||||||
|
}
|
||||||
if (module_proc == "") {
|
if (module_proc == "") {
|
||||||
module_proc = parseLine (line, TOKEN_PROC);
|
module_proc = parseLine (line, TOKEN_PROC);
|
||||||
}
|
}
|
||||||
|
@ -1130,6 +1135,9 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
|
||||||
if (module_timeout != "") {
|
if (module_timeout != "") {
|
||||||
module->setTimeout (atoi (module_timeout.c_str ()));
|
module->setTimeout (atoi (module_timeout.c_str ()));
|
||||||
}
|
}
|
||||||
|
if (module_wait_timeout != "") {
|
||||||
|
module->setWaitTimeout (atoi (module_wait_timeout.c_str ()));
|
||||||
|
}
|
||||||
|
|
||||||
} else if (module_proc != "") {
|
} else if (module_proc != "") {
|
||||||
module = new Pandora_Module_Proc (module_name,
|
module = new Pandora_Module_Proc (module_name,
|
||||||
|
@ -1230,6 +1238,9 @@ Pandora_Module_Factory::getModuleFromDefinition (string definition) {
|
||||||
if (module_timeout != ""){
|
if (module_timeout != ""){
|
||||||
module->setTimeout(atoi(module_timeout.c_str()));
|
module->setTimeout(atoi(module_timeout.c_str()));
|
||||||
}
|
}
|
||||||
|
if (module_wait_timeout != "") {
|
||||||
|
module->setWaitTimeout (atoi (module_wait_timeout.c_str ()));
|
||||||
|
}
|
||||||
} else if (module_ping != "") {
|
} else if (module_ping != "") {
|
||||||
if (module_ping_count == "") {
|
if (module_ping_count == "") {
|
||||||
module_ping_count = "1";
|
module_ping_count = "1";
|
||||||
|
|
Loading…
Reference in New Issue