mirror of
https://github.com/pandorafms/pandorafms.git
synced 2025-07-31 01:35:36 +02:00
Merge branch 'ent-4164-8143-No-funciona-module_interval-en-modulos-de-agente-broker' into 'develop'
module_interval in broker (linux agents) See merge request artica/pandorafms!2709
This commit is contained in:
commit
970cbbb4be
@ -239,6 +239,15 @@ my $tentacle_pid = undef;
|
|||||||
# PID of udp_server
|
# PID of udp_server
|
||||||
my $udp_server_pid = undef;
|
my $udp_server_pid = undef;
|
||||||
|
|
||||||
|
# BrokerFlag
|
||||||
|
my $BrokerFlag = 0;
|
||||||
|
|
||||||
|
# Global loop counter.
|
||||||
|
my $LoopCounter = 0;
|
||||||
|
|
||||||
|
# Define a max value for loopCounter to avoid overflow.
|
||||||
|
use constant MAX_LOOP_COUNTER => 1000000000;
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Print usage information and exit.
|
# Print usage information and exit.
|
||||||
################################################################################
|
################################################################################
|
||||||
@ -1385,6 +1394,7 @@ sub sleep_agent {
|
|||||||
exit (0);
|
exit (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$LoopCounter = ($LoopCounter + 1) % MAX_LOOP_COUNTER;
|
||||||
return $iter_base_time;
|
return $iter_base_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1699,6 +1709,14 @@ sub exec_module {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Check module interval
|
# Check module interval
|
||||||
|
if ($BrokerFlag > 0) {
|
||||||
|
if ($LoopCounter == 0) {
|
||||||
|
$module->{'counter'} = $module->{'intensive_interval'};
|
||||||
|
} else {
|
||||||
|
$module->{'counter'} = (($LoopCounter -1 ) % $module->{'intensive_interval'});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (++($module->{'counter'}) < $module->{'intensive_interval'}) {
|
if (++($module->{'counter'}) < $module->{'intensive_interval'}) {
|
||||||
$ThreadSem->up () if (defined ($ThreadSem) && $Conf{'agent_threads'} > 1);
|
$ThreadSem->up () if (defined ($ThreadSem) && $Conf{'agent_threads'} > 1);
|
||||||
return;
|
return;
|
||||||
@ -2985,7 +3003,6 @@ while (1) {
|
|||||||
@BrokerPid = ();
|
@BrokerPid = ();
|
||||||
my @broker_agents = read_config ('broker_agent');
|
my @broker_agents = read_config ('broker_agent');
|
||||||
foreach my $broker_agent (@broker_agents) {
|
foreach my $broker_agent (@broker_agents) {
|
||||||
|
|
||||||
# Create broker conf file if it does not exist
|
# Create broker conf file if it does not exist
|
||||||
if (! -e "$ConfDir/${broker_agent}.conf") {
|
if (! -e "$ConfDir/${broker_agent}.conf") {
|
||||||
write_broker_conf($broker_agent);
|
write_broker_conf($broker_agent);
|
||||||
@ -2995,7 +3012,9 @@ while (1) {
|
|||||||
|
|
||||||
# Broker agent
|
# Broker agent
|
||||||
if ($main_agent == 0) {
|
if ($main_agent == 0) {
|
||||||
|
# Mark broker flag.
|
||||||
|
$BrokerFlag = 1;
|
||||||
|
|
||||||
# Set the configuration file
|
# Set the configuration file
|
||||||
$ConfFile = "${broker_agent}.conf";
|
$ConfFile = "${broker_agent}.conf";
|
||||||
|
|
||||||
|
@ -1422,48 +1422,48 @@ Pandora_Module::evaluatePreconditions () {
|
|||||||
buffer[read] = '\0';
|
buffer[read] = '\0';
|
||||||
output += (char *) buffer;
|
output += (char *) buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
double_output = Pandora_Strutils::strtodouble (output);
|
double_output = Pandora_Strutils::strtodouble (output);
|
||||||
} catch (Pandora_Strutils::Invalid_Conversion e) {
|
} catch (Pandora_Strutils::Invalid_Conversion e) {
|
||||||
double_output = 0;
|
double_output = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dwRet == WAIT_OBJECT_0) {
|
||||||
|
break;
|
||||||
|
} else if(this->getTimeout() < GetTickCount() - tickbase) {
|
||||||
|
/* STILL_ACTIVE */
|
||||||
|
TerminateProcess(pi.hThread, STILL_ACTIVE);
|
||||||
|
pandoraLog ("evaluatePreconditions: %s timed out (retcode: %d)", this->module_name.c_str (), STILL_ACTIVE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dwRet == WAIT_OBJECT_0) {
|
GetExitCodeProcess (pi.hProcess, &retval);
|
||||||
break;
|
|
||||||
} else if(this->getTimeout() < GetTickCount() - tickbase) {
|
if (retval != 0) {
|
||||||
/* STILL_ACTIVE */
|
if (! TerminateJobObject (job, 0)) {
|
||||||
TerminateProcess(pi.hThread, STILL_ACTIVE);
|
pandoraLog ("evaluatePreconditions: TerminateJobObject failed. (error %d)",
|
||||||
pandoraLog ("evaluatePreconditions: %s timed out (retcode: %d)", this->module_name.c_str (), STILL_ACTIVE);
|
GetLastError ());
|
||||||
break;
|
}
|
||||||
|
if (retval != STILL_ACTIVE) {
|
||||||
|
pandoraLog ("evaluatePreconditions: %s did not executed well (retcode: %d)",
|
||||||
|
this->module_name.c_str (), retval);
|
||||||
|
}
|
||||||
|
/* Close job, process and thread handles. */
|
||||||
|
CloseHandle (job);
|
||||||
|
CloseHandle (pi.hProcess);
|
||||||
|
CloseHandle (pi.hThread);
|
||||||
|
CloseHandle (new_stdout);
|
||||||
|
CloseHandle (out_read);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
GetExitCodeProcess (pi.hProcess, &retval);
|
|
||||||
|
|
||||||
if (retval != 0) {
|
|
||||||
if (! TerminateJobObject (job, 0)) {
|
|
||||||
pandoraLog ("evaluatePreconditions: TerminateJobObject failed. (error %d)",
|
|
||||||
GetLastError ());
|
|
||||||
}
|
|
||||||
if (retval != STILL_ACTIVE) {
|
|
||||||
pandoraLog ("evaluatePreconditions: %s did not executed well (retcode: %d)",
|
|
||||||
this->module_name.c_str (), retval);
|
|
||||||
}
|
|
||||||
/* Close job, process and thread handles. */
|
/* Close job, process and thread handles. */
|
||||||
CloseHandle (job);
|
CloseHandle (job);
|
||||||
CloseHandle (pi.hProcess);
|
CloseHandle (pi.hProcess);
|
||||||
CloseHandle (pi.hThread);
|
CloseHandle (pi.hThread);
|
||||||
CloseHandle (new_stdout);
|
|
||||||
CloseHandle (out_read);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Close job, process and thread handles. */
|
|
||||||
CloseHandle (job);
|
|
||||||
CloseHandle (pi.hProcess);
|
|
||||||
CloseHandle (pi.hThread);
|
|
||||||
}
|
|
||||||
|
|
||||||
CloseHandle (new_stdout);
|
CloseHandle (new_stdout);
|
||||||
CloseHandle (out_read);
|
CloseHandle (out_read);
|
||||||
@ -1693,4 +1693,18 @@ Pandora_Module::getAsync () {
|
|||||||
return this->async;
|
return this->async;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get current exections
|
||||||
|
*/
|
||||||
|
long
|
||||||
|
Pandora_Module::getExecutions () {
|
||||||
|
return this->executions;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set current execution (global) used for brokers.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
Pandora_Module::setExecutions (long executions) {
|
||||||
|
this->executions = executions;
|
||||||
|
}
|
||||||
|
@ -234,6 +234,8 @@ namespace Pandora_Modules {
|
|||||||
int getTimeout ();
|
int getTimeout ();
|
||||||
string getSave ();
|
string getSave ();
|
||||||
bool getAsync ();
|
bool getAsync ();
|
||||||
|
void setExecutions(long executions=0);
|
||||||
|
long getExecutions();
|
||||||
|
|
||||||
virtual string getXml ();
|
virtual string getXml ();
|
||||||
|
|
||||||
|
@ -1849,7 +1849,7 @@ Pandora_Windows_Service::sendBufferedXml (string path) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Pandora_Windows_Service::pandora_run_broker (string config) {
|
Pandora_Windows_Service::pandora_run_broker (string config, long executions) {
|
||||||
Pandora_Agent_Conf *conf = NULL;
|
Pandora_Agent_Conf *conf = NULL;
|
||||||
string server_addr;
|
string server_addr;
|
||||||
unsigned char data_flag = 0;
|
unsigned char data_flag = 0;
|
||||||
@ -1876,7 +1876,10 @@ Pandora_Windows_Service::pandora_run_broker (string config) {
|
|||||||
Pandora_Module *module;
|
Pandora_Module *module;
|
||||||
|
|
||||||
module = this->broker_modules->getCurrentValue ();
|
module = this->broker_modules->getCurrentValue ();
|
||||||
|
|
||||||
|
/* Keep executions matching main agent */
|
||||||
|
module->setExecutions(executions);
|
||||||
|
|
||||||
/* Check preconditions */
|
/* Check preconditions */
|
||||||
if (module->evaluatePreconditions () == 0) {
|
if (module->evaluatePreconditions () == 0) {
|
||||||
pandoraDebug ("Preconditions not matched for module %s", module->getName ().c_str ());
|
pandoraDebug ("Preconditions not matched for module %s", module->getName ().c_str ());
|
||||||
@ -2074,7 +2077,7 @@ Pandora_Windows_Service::pandora_run (int forced_run) {
|
|||||||
check_broker_agents(all_conf);
|
check_broker_agents(all_conf);
|
||||||
for (i=0;i<num;i++){
|
for (i=0;i<num;i++){
|
||||||
pandora_init_broker(all_conf[i]);
|
pandora_init_broker(all_conf[i]);
|
||||||
pandora_run_broker(all_conf[i]);
|
pandora_run_broker(all_conf[i], execution_number);
|
||||||
}
|
}
|
||||||
delete []all_conf;
|
delete []all_conf;
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ namespace Pandora {
|
|||||||
int checkConfig (string file);
|
int checkConfig (string file);
|
||||||
void purgeDiskCollections ();
|
void purgeDiskCollections ();
|
||||||
void pandora_init_broker (string file_conf);
|
void pandora_init_broker (string file_conf);
|
||||||
void pandora_run_broker (string config);
|
void pandora_run_broker (string config, long executions=0);
|
||||||
int count_broker_agents();
|
int count_broker_agents();
|
||||||
void check_broker_agents(string *all_conf);
|
void check_broker_agents(string *all_conf);
|
||||||
int launchTentacleProxy();
|
int launchTentacleProxy();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user