From 5f3c0c15d5c45b4919f32ae07439575e1c4ecf7b Mon Sep 17 00:00:00 2001 From: darode Date: Wed, 9 May 2012 07:40:24 +0000 Subject: [PATCH] 2012-05-09 Dario Rodriguez * util/plugin/ipmi-plugin.pl, util/recon_scripts/ipmi-recon.pl: Fixed some bugs of plugin and recon MERGED FROM 4.0.2 git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@6275 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f --- pandora_server/ChangeLog | 8 +++ pandora_server/util/plugin/ipmi-plugin.pl | 27 ++++++---- .../util/recon_scripts/ipmi-recon.pl | 51 ++++++++++--------- 3 files changed, 52 insertions(+), 34 deletions(-) diff --git a/pandora_server/ChangeLog b/pandora_server/ChangeLog index 692d7d0729..8beb0e644b 100644 --- a/pandora_server/ChangeLog +++ b/pandora_server/ChangeLog @@ -1,3 +1,11 @@ +2012-05-09 Dario Rodriguez + + * util/plugin/ipmi-plugin.pl, + util/recon_scripts/ipmi-recon.pl: Fixed some bugs of plugin and + recon + + MERGED FROM 4.0.2 + 2012-05-08 Sancho Lerena * conf/pandora_server.conf: Better default values. diff --git a/pandora_server/util/plugin/ipmi-plugin.pl b/pandora_server/util/plugin/ipmi-plugin.pl index 368b3349b0..c0991f91c6 100644 --- a/pandora_server/util/plugin/ipmi-plugin.pl +++ b/pandora_server/util/plugin/ipmi-plugin.pl @@ -21,24 +21,33 @@ sub get_param($) { return $value; } +########################################################################## +# Show help +########################################################################## +sub show_help { + print "\nSpecific Pandora FMS Intel DCM Discovery\n"; + print "(c) Artica ST 2011 \n\n"; + print "Usage:\n\n"; + print " $0 -h -u -p -s \n"; + exit; +} + +if ($#ARGV == -1){ + show_help(); +} + my $host = get_param("h"); my $user = get_param("u"); my $pass = get_param("p"); my $sensor = get_param("s"); -my $res = `ipmi-sensors -h $host -u $user -p $pass -s $sensor`; +my $res = `ipmi-sensors -h $host -u $user -p $pass -s $sensor | tail -1`; -my @aux = split(/:/, $res); +my @aux = split(/\|/, $res); -my $value = $aux[2]; +my $value = $aux[3]; $value =~ s/\n//; - -if ($value =~ / (\S+) .+/) { - $value = $1; -} - -#Clean value $value =~ s/^\s+//; $value =~ s/\s+$//; diff --git a/pandora_server/util/recon_scripts/ipmi-recon.pl b/pandora_server/util/recon_scripts/ipmi-recon.pl index 2c5345e541..e567c86c19 100644 --- a/pandora_server/util/recon_scripts/ipmi-recon.pl +++ b/pandora_server/util/recon_scripts/ipmi-recon.pl @@ -21,7 +21,8 @@ use PandoraFMS::Config; ########################################################################## # Global variables so set behaviour here: -my $target_timeout = 5; # Fixed to 5 secs by default +my $pkg_count = 3; #Number of ping pkgs +my $pkg_timeout = 3; #Pkg ping timeout wait ########################################################################## # Code begins here, do not touch @@ -63,22 +64,12 @@ sub show_help { ########################################################################## # Get SNMP response. ########################################################################## -sub get_snmp_response ($$$) { - my ($target_timeout, $target_community, $addr) = @_; - - # The OID used is the SysUptime OID - my $buffer = `/usr/bin/snmpget -v 1 -r0 -t$target_timeout -OUevqt -c '$target_community' $addr .1.3.6.1.2.1.1.3.0 2>/dev/null`; - - # Remove forbidden caracters - $buffer =~ s/\l|\r|\"|\n|\<|\>|\&|\[|\]//g; - - return $buffer; -} - -sub ipmi_ping ($) { +sub ipmi_ping ($$$) { my $addr = shift; + my $pkg_count = shift; + my $pkg_timeout = shift; - my $cmd = "ipmiping $addr -c 3"; + my $cmd = "ipmiping $addr -c $pkg_count -t $pkg_timeout"; my $res = `$cmd`; @@ -97,25 +88,35 @@ sub create_ipmi_modules($$$$$$) { my $res = `$cmd`; my @lines = split(/\n/, $res); - + my $ipmi_plugin_id = get_db_value($dbh, "SELECT id FROM tplugin WHERE name = '".safe_input("IPMI Plugin")."'"); - foreach my $line (@lines) { - my @aux = split(/:/, $line); + for(my $i=1; $i < $#lines; $i++) { + + my $line = $lines[$i]; + + my @aux = split(/\|/, $line); my $name = $aux[1]; #Trim name $name =~ s/^\s+//; $name =~ s/\s+$//; - + my $module_type = "generic_data_string"; - if ($aux[2] =~ /.+ (\w) \(/) { + my $value_read = $aux[3]; + + #Trim name + $value_read =~ s/^\s+//; + $value_read =~ s/\s+$//; + + #Check if value read is integer or boolean + if ($value_read =~ m/^\d+.\d+$/ || $value_read =~ m/^\d+$/) { $module_type = "generic_data"; } - + my $id_module_type = get_module_id($dbh, $module_type); my $params = "-s $aux[0]"; @@ -160,7 +161,7 @@ $conf{'pandora_path'} = $pandora_conf; pandora_load_config (\%conf); # Connect to the DB -my $dbh = db_connect ('mysql', $conf{'dbname'}, $conf{'dbhost'}, $conf{'dbport'}, $conf{'dbuser'}, $conf{'dbpass'}); +my $dbh = db_connect ('mysql', $conf{'dbname'}, $conf{'dbhost'}, '3306', $conf{'dbuser'}, $conf{'dbpass'}); # Start the network sweep @@ -197,12 +198,12 @@ for (my $i = 1; $net_addr <= $net_addr->broadcast; $i++, $net_addr++) { # Update the recon task update_recon_task ($dbh, $task_id, ceil ($i / ($total_hosts / 100))); - + my $alive = 0; - if (ipmi_ping ($addr) == 1) { + if (ipmi_ping ($addr, $pkg_count, $pkg_timeout) == 1) { $alive = 1; } - + next unless ($alive > 0); # Resolve the address