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

* pandora_agent: Added the module_save and module_condition features.
          See http://www.openideas.info/wiki/ for more information.




git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@2924 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
Ramon Novoa 2010-06-23 18:01:38 +00:00
parent 725f167878
commit 849dcd1178
2 changed files with 56 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2010-06-23 Ramon Novoa <rnovoa@artica.es>
* pandora_agent: Added the module_save and module_condition features.
See http://www.openideas.info/wiki/ for more information.
2010-06-14 Junichi Satoh <junichi@rworks.jp>
* pandora_agent_installer: Set execute bit to startup script for

View File

@ -233,7 +233,9 @@ sub read_config (;$) {
'counter' => 0,
'max' => 0,
'min' => 0,
'postprocess' => 0
'postprocess' => 0,
'save' => '',
'actions' => []
};
} elsif ($line =~ /^\s*module_name\s+(.+)$/) {
$module->{'name'} = $1;
@ -279,6 +281,20 @@ sub read_config (;$) {
$module->{'counter'} = $1;
} elsif ($line =~ /^\s*module_timeout\s+(\d+)\s*$/) {
$module->{'timeout'} = $1;
} elsif ($line =~ /^\s*module_save\s+(\w+)$/) {
$module->{'save'} = $1;
} elsif ($line =~ /^\s*module_condition\s+(.*)$/) {
my $action = $1;
# Numeric comparison
if ($action =~ /^\s*([<>!=]+)\s+(\d+\.\d*)\s+(.*)$/) {
push (@{$module->{'conditions'}}, {'operator' => $1, 'value_1' => $2, 'command' => $3});
# Interval
} elsif ($action =~ /^\s*[(]\s*(\d+\.\d*)\s*,\s*(\d+\.\d*)\s*[)]\s+(.*)$/) {
push (@{$module->{'conditions'}}, {'operator' => '()', 'value_1' => $1, 'value_2' => $2, 'command' => $3});
# Regular expression
} elsif ($action =~ /^\s*=~\s+(\S*)\s+(.*)$/) {
push (@{$module->{'conditions'}}, {'operator' => '=~', 'value_1' => $1, 'command' => $2});
}
} elsif ($line =~ /^\s*module_end\s*$/) {
next unless ($module->{'name'} ne '') and ($module->{'func'} != 0);
push (@Modules, $module);
@ -625,7 +641,18 @@ sub exec_module ($) {
no strict 'refs';
# Run
return &{$module->{'func'}}($module);
my @value = &{$module->{'func'}}($module);
# Save the module value if needed (only works for the first returned value)
if ($module->{'save'} ne '') {
if (defined ($value[0])) {
$ENV{$module->{'save'}} = $value[0] ;
} else {
$ENV{$module->{'save'}} = '';
}
}
return @value;
}
################################################################################
@ -730,6 +757,9 @@ sub module_exec ($) {
# Something went wrong or no data
return () unless ($? eq 0 && defined ($data[0]));
# Evaluate module actions
evaluate_module_conditions ($module, $data[0]);
return @data;
}
@ -878,6 +908,25 @@ sub module_freepercentmemory ($) {
return sprintf (("%d", $avail * 100 / $total));
}
################################################################################
# Evaluate and execute module conditions.
################################################################################
sub evaluate_module_conditions ($$) {
my ($module, $data) = @_;
# Evaluate conditions
foreach my $condition (@{$module->{'conditions'}}) {
if (($condition->{'operator'} eq '>' && $data > $condition->{'value_1'}) ||
($condition->{'operator'} eq '<' && $data < $condition->{'value_1'}) ||
($condition->{'operator'} eq '=' && $data == $condition->{'value_1'}) ||
($condition->{'operator'} eq '!=' && $data != $condition->{'value_1'}) ||
($condition->{'operator'} eq '=~' && $data =~ /$condition->{'value_1'}/) ||
($condition->{'operator'} eq '()' && $data > $condition->{'value_1'} && $data < $condition->{'value_2'})) {
`$condition->{'command'} 2> /dev/null`;
}
}
}
################################################################################
# Main.
################################################################################