diff --git a/src/check_snmp_mem.pl b/src/check_snmp_mem.pl index 076335128..0b9cc24db 100644 --- a/src/check_snmp_mem.pl +++ b/src/check_snmp_mem.pl @@ -13,8 +13,8 @@ # use strict; -use Net::SNMP; use Getopt::Long; +require "@NAGIOS_PLUGINS@/Centreon/SNMP/Utils.pm"; # Nagios specific @@ -24,6 +24,15 @@ use utils qw(%ERRORS $TIMEOUT); #my %ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4); # SNMP Datas +my %OPTION = ( + "host" => undef, + "snmp-community" => "public", "snmp-version" => 1, "snmp-port" => 161, + "snmp-auth-key" => undef, "snmp-auth-user" => undef, "snmp-auth-password" => undef, "snmp-auth-protocol" => "MD5", + "snmp-priv-key" => undef, "snmp-priv-password" => undef, "snmp-priv-protocol" => "DES", + "maxrepetitions" => undef, + "64-bits" => undef, +); +my $session_params; # Net-snmp memory @@ -62,9 +71,6 @@ my $hp_mem_free_seg = "1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.3"; # Free segments my $Version='1.1'; -my $o_host = undef; # hostname -my $o_community = undef; # community -my $o_port = 161; # port my $o_help= undef; # wan't some help ? my $o_verb= undef; # verbose mode my $o_version= undef; # print version @@ -80,14 +86,6 @@ my $o_critS= undef; # critical level for swap my $o_perf= undef; # Performance data option my $o_cache= undef; # Include cached memory as used memory my $o_timeout= undef; # Timeout (Default 5) -my $o_version2= undef; # use snmp v2c -# SNMPv3 specific -my $o_login= undef; # Login for snmpv3 -my $o_passwd= undef; # Pass for snmpv3 -my $v3protocols=undef; # V3 protocol list. -my $o_authproto='md5'; # Auth protocol -my $o_privproto='des'; # Priv protocol -my $o_privpass= undef; # priv password # functions @@ -120,16 +118,9 @@ sub help { name or IP address of host to check -C, --community=COMMUNITY NAME community name for the host's SNMP agent (implies SNMP v1 or v2c with option) --2, --v2c - Use snmp v2c -l, --login=LOGIN ; -x, --passwd=PASSWD Login and auth password for snmpv3 authentication If no priv password exists, implies AuthNoPriv --X, --privpass=PASSWD - Priv password for snmpv3 (AuthPriv protocol) --L, --protocols=, - : Authentication protocol (md5|sha : default md5) - : Priv protocole (des|aes : default des) -P, --port=PORT SNMP port (Default 161) -w, --warn=INTEGER | INT,INT @@ -169,21 +160,26 @@ $SIG{'ALRM'} = sub { sub check_options { Getopt::Long::Configure ("bundling"); GetOptions( - 'v' => \$o_verb, 'verbose' => \$o_verb, + "H|hostname|host=s" => \$OPTION{'host'}, + "C|community=s" => \$OPTION{'snmp-community'}, + "snmp|snmp-version=s" => \$OPTION{'snmp-version'}, + "p|port|P|snmpport|snmp-port=i" => \$OPTION{'snmp-port'}, + "l|login|username=s" => \$OPTION{'snmp-auth-user'}, + "x|passwd|authpassword|password=s" => \$OPTION{'snmp-auth-password'}, + "k|authkey=s" => \$OPTION{'snmp-auth-key'}, + "authprotocol=s" => \$OPTION{'snmp-auth-protocol'}, + "privpassword=s" => \$OPTION{'snmp-priv-password'}, + "privkey=s" => \$OPTION{'snmp-priv-key'}, + "privprotocol=s" => \$OPTION{'snmp-priv-protocol'}, + "maxrepetitions=s" => \$OPTION{'maxrepetitions'}, + "64-bits" => \$OPTION{'64-bits'}, + 'v' => \$o_verb, 'verbose' => \$o_verb, 'h' => \$o_help, 'help' => \$o_help, - 'H:s' => \$o_host, 'hostname:s' => \$o_host, - 'p:i' => \$o_port, 'port:i' => \$o_port, - 'C:s' => \$o_community, 'community:s' => \$o_community, - 'l:s' => \$o_login, 'login:s' => \$o_login, - 'x:s' => \$o_passwd, 'passwd:s' => \$o_passwd, - 'X:s' => \$o_privpass, 'privpass:s' => \$o_privpass, - 'L:s' => \$v3protocols, 'protocols:s' => \$v3protocols, - 't:i' => \$o_timeout, 'timeout:i' => \$o_timeout, - 'V' => \$o_version, 'version' => \$o_version, - 'I' => \$o_cisco, 'cisco' => \$o_cisco, - 'N' => \$o_netsnmp, 'netsnmp' => \$o_netsnmp, + 't:i' => \$o_timeout, 'timeout:i' => \$o_timeout, + 'V' => \$o_version, 'version' => \$o_version, + 'I' => \$o_cisco, 'cisco' => \$o_cisco, + 'N' => \$o_netsnmp, 'netsnmp' => \$o_netsnmp, 'E' => \$o_hp, 'hp' => \$o_hp, - '2' => \$o_version2, 'v2c' => \$o_version2, 'c:s' => \$o_crit, 'critical:s' => \$o_crit, 'w:s' => \$o_warn, 'warn:s' => \$o_warn, 'm' => \$o_cache, 'memcache' => \$o_cache, @@ -191,21 +187,8 @@ sub check_options { ); if (defined ($o_help) ) { help(); exit $ERRORS{"UNKNOWN"}}; if (defined($o_version)) { p_version(); exit $ERRORS{"UNKNOWN"}}; - if ( ! defined($o_host) ) # check host and filter - { print "No host defined!\n";print_usage(); exit $ERRORS{"UNKNOWN"}} # check snmp information - if ( !defined($o_community) && (!defined($o_login) || !defined($o_passwd)) ) - { print "Put snmp login info!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} - if ((defined($o_login) || defined($o_passwd)) && (defined($o_community) || defined($o_version2)) ) - { print "Can't mix snmp v1,2c,3 protocols!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} - if (defined ($v3protocols)) { - if (!defined($o_login)) { print "Put snmp V3 login info with protocols!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} - my @v3proto=split(/,/,$v3protocols); - if ((defined ($v3proto[0])) && ($v3proto[0] ne "")) {$o_authproto=$v3proto[0]; } # Auth protocol - if (defined ($v3proto[1])) {$o_privproto=$v3proto[1]; } # Priv protocol - if ((defined ($v3proto[1])) && (!defined($o_privpass))) { - print "Put snmp V3 priv login info with priv protocols!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} - } + ($session_params) = Centreon::SNMP::Utils::check_snmp_options($ERRORS{'UNKNOWN'}, \%OPTION); if (defined($o_timeout) && (isnnum($o_timeout) || ($o_timeout < 2) || ($o_timeout > 60))) { print "Timeout must be >1 and <60 !\n"; print_usage(); exit $ERRORS{"UNKNOWN"}} if (!defined($o_timeout)) {$o_timeout=5;} @@ -248,66 +231,15 @@ check_options(); # Check gobal timeout if snmp screws up if (defined($TIMEOUT)) { - verb("Alarm at $TIMEOUT"); - alarm($TIMEOUT); + verb("Alarm at $TIMEOUT"); + alarm($TIMEOUT); } else { - verb("no timeout defined : $o_timeout + 10"); - alarm ($o_timeout+10); + verb("no timeout defined : $o_timeout + 10"); + alarm ($o_timeout+10); } # Connect to host -my ($session,$error); -if ( defined($o_login) && defined($o_passwd)) { - # SNMPv3 login - if (!defined ($o_privpass)) { - verb("SNMPv3 AuthNoPriv login : $o_login, $o_authproto"); - ($session, $error) = Net::SNMP->session( - -hostname => $o_host, - -version => '3', - -username => $o_login, - -authpassword => $o_passwd, - -authprotocol => $o_authproto, - -timeout => $o_timeout - ); - } else { - verb("SNMPv3 AuthPriv login : $o_login, $o_authproto, $o_privproto"); - ($session, $error) = Net::SNMP->session( - -hostname => $o_host, - -version => '3', - -username => $o_login, - -authpassword => $o_passwd, - -authprotocol => $o_authproto, - -privpassword => $o_privpass, - -privprotocol => $o_privproto, - -timeout => $o_timeout - ); - } -} else { - if (defined ($o_version2)) { - # SNMPv2 Login - verb("SNMP v2c login"); - ($session, $error) = Net::SNMP->session( - -hostname => $o_host, - -version => 2, - -community => $o_community, - -port => $o_port, - -timeout => $o_timeout - ); - } else { - # SNMPV1 login - verb("SNMP v1 login"); - ($session, $error) = Net::SNMP->session( - -hostname => $o_host, - -community => $o_community, - -port => $o_port, - -timeout => $o_timeout - ); - } -} -if (!defined($session)) { - printf("ERROR opening session: %s.\n", $error); - exit $ERRORS{"UNKNOWN"}; -} +my $session = Centreon::SNMP::Utils::connection($ERRORS{'UNKNOWN'}, $session_params); # Global variable my $resultat=undef; @@ -315,211 +247,180 @@ my $resultat=undef; ########### Cisco memory check ############ if (defined ($o_cisco)) { - # Get Cisco memory table - $resultat = (Net::SNMP->VERSION < 4) ? - $session->get_table($cisco_mem_pool) - :$session->get_table(Baseoid => $cisco_mem_pool); - - if (!defined($resultat)) { - printf("ERROR: Description table : %s.\n", $session->error); - $session->close; - exit $ERRORS{"UNKNOWN"}; - } - my (@oid,@index)=(undef,undef); - my $nindex=0; - foreach my $key ( keys %$resultat) { - verb("OID : $key, Desc : $$resultat{$key}"); - if ( $key =~ /$cisco_index/ ) { - @oid=split (/\./,$key); - $index[$nindex++] = pop(@oid); - } - } - - # Check if at least 1 memory pool exists - if ($nindex == 0) { - printf("ERROR: No memory pools found"); - $session->close; - exit $ERRORS{"UNKNOWN"}; - } + # Get Cisco memory table + $resultat = Centreon::SNMP::Utils::get_snmp_table($cisco_mem_pool, $session, $ERRORS{'UNKNOWN'}, \%OPTION); + my (@oid,@index)=(undef,undef); + my $nindex=0; + foreach my $key ( keys %$resultat) { + verb("OID : $key, Desc : $$resultat{$key}"); + if ( $key =~ /$cisco_index/ ) { + @oid=split (/\./,$key); + $index[$nindex++] = pop(@oid); + } + } - # Test every memory pool - my ($c_output,$prct_free)=(undef,undef); - my ($warn_s,$crit_s)=(0,0); - my ($used,$free)=(0,0); - foreach (@index) { - $c_output .="," if defined ($c_output); - if ( $$resultat{$cisco_valid . "." . $_} == 1 ) { - $used += $$resultat{$cisco_used . "." . $_}; - $free += $$resultat{$cisco_free . "." . $_}; - $prct_free=round($$resultat{$cisco_used . "." . $_}*100/($$resultat{$cisco_free . "." . $_}+$$resultat{$cisco_used . "." . $_}) ,0); - $c_output .= $$resultat{$cisco_index . "." . $_} . ":" . $prct_free . "%"; - if (($o_crit!=0)&&($o_crit <= $prct_free)) { - $crit_s =1; - } elsif (($o_warn!=0)&&($o_warn <= $prct_free)) { - $warn_s=1; - } + # Check if at least 1 memory pool exists + if ($nindex == 0) { + printf("ERROR: No memory pools found"); + exit $ERRORS{"UNKNOWN"}; + } + + # Test every memory pool + my ($c_output,$prct_free)=(undef,undef); + my ($warn_s,$crit_s)=(0,0); + my ($used,$free)=(0,0); + foreach (@index) { + $c_output .="," if defined ($c_output); + if ( $$resultat{$cisco_valid . "." . $_} == 1 ) { + $used += $$resultat{$cisco_used . "." . $_}; + $free += $$resultat{$cisco_free . "." . $_}; + $prct_free=round($$resultat{$cisco_used . "." . $_}*100/($$resultat{$cisco_free . "." . $_}+$$resultat{$cisco_used . "." . $_}) ,0); + $c_output .= $$resultat{$cisco_index . "." . $_} . ":" . $prct_free . "%"; + if (($o_crit!=0)&&($o_crit <= $prct_free)) { + $crit_s =1; + } elsif (($o_warn!=0)&&($o_warn <= $prct_free)) { + $warn_s=1; + } + } else { + $c_output .= $$resultat{$cisco_index . "." . $_} . ": INVALID"; + $crit_s =1; + } + } + my $total=$used+$free; + $prct_free=round($used*100/($total),0); + verb("Total used : $used, free: $free, output : $c_output"); + my $c_status="OK"; + $c_output .=" : " . $prct_free ."% : "; + if ($crit_s == 1 ) { + $c_output .= " > " . $o_crit ; + $c_status="CRITICAL"; } else { - $c_output .= $$resultat{$cisco_index . "." . $_} . ": INVALID"; - $crit_s =1; + if ($warn_s == 1 ) { + $c_output.=" > " . $o_warn; + $c_status="WARNING"; + } } - } - my $total=$used+$free; - $prct_free=round($used*100/($total),0); - verb("Total used : $used, free: $free, output : $c_output"); - my $c_status="OK"; - $c_output .=" : " . $prct_free ."% : "; - if ($crit_s == 1 ) { - $c_output .= " > " . $o_crit ; - $c_status="CRITICAL"; - } else { - if ($warn_s == 1 ) { - $c_output.=" > " . $o_warn; - $c_status="WARNING"; - } - } - $c_output .= " ; ".$c_status; - if (defined ($o_perf)) { - $c_output .= " | ram_used=" . $used.";"; - $c_output .= ($o_warn ==0)? ";" : round($o_warn * $total/100,0).";"; - $c_output .= ($o_crit ==0)? ";" : round($o_crit * $total/100,0).";"; - $c_output .= "0;" . $total ; - } - $session->close; - print "$c_output \n"; - exit $ERRORS{$c_status}; + $c_output .= " ; ".$c_status; + if (defined ($o_perf)) { + $c_output .= " | ram_used=" . $used.";"; + $c_output .= ($o_warn ==0)? ";" : round($o_warn * $total/100,0).";"; + $c_output .= ($o_crit ==0)? ";" : round($o_crit * $total/100,0).";"; + $c_output .= "0;" . $total ; + } + print "$c_output \n"; + exit $ERRORS{$c_status}; } ########### HP Procurve memory check ############ if (defined ($o_hp)) { - # Get hp memory table - $resultat = (Net::SNMP->VERSION < 4) ? - $session->get_table($hp_mem_pool) - :$session->get_table(Baseoid => $hp_mem_pool); - - if (!defined($resultat)) { - printf("ERROR: Description table : %s.\n", $session->error); - $session->close; - exit $ERRORS{"UNKNOWN"}; - } - my (@oid,@index)=(undef,undef); - my $nindex=0; - foreach my $key ( keys %$resultat) { - verb("OID : $key, Desc : $$resultat{$key}"); - if ( $key =~ /$hp_mem_index/ ) { - @oid=split (/\./,$key); - $index[$nindex++] = pop(@oid); - } - } - - # Check if at least 1 memory slots exists - if ($nindex == 0) { - printf("ERROR: No memory slots found"); - $session->close; - exit $ERRORS{"UNKNOWN"}; - } - - # Consolidate the datas - my ($total,$free)=(0,0); - my ($c_output,$prct_free)=(undef,undef); - foreach (@index) { - $c_output .="," if defined ($c_output); - $total += $$resultat{$hp_mem_total . "." . $_}; - $free += $$resultat{$hp_mem_free . "." . $_}; - $c_output .= "Slot " . $$resultat{$hp_mem_index . "." . $_} . ":" - .round( - 100 - ($$resultat{$hp_mem_free . "." . $_} *100 / - $$resultat{$hp_mem_total . "." . $_}) ,0) - . "%"; - } - my $used = $total - $free; - $prct_free=round($used*100/($total),0); - verb("Used : $used, Free: $free, Output : $c_output"); - my $c_status="OK"; - $c_output .=" : " . $prct_free ."% : "; - if (($o_crit!=0)&&($o_crit <= $prct_free)) { - $c_output .= " > " . $o_crit ; - $c_status="CRITICAL"; - } else { - if (($o_warn!=0)&&($o_warn <= $prct_free)) { - $c_output.=" > " . $o_warn; - $c_status="WARNING"; + # Get hp memory table + $resultat = Centreon::SNMP::Utils::get_snmp_table($hp_mem_pool, $session, $ERRORS{'UNKNOWN'}, \%OPTION); + my (@oid,@index)=(undef,undef); + my $nindex=0; + foreach my $key ( keys %$resultat) { + verb("OID : $key, Desc : $$resultat{$key}"); + if ( $key =~ /$hp_mem_index/ ) { + @oid=split (/\./,$key); + $index[$nindex++] = pop(@oid); + } } - } - $c_output .= " ; ".$c_status; - if (defined ($o_perf)) { - $c_output .= " | ram_used=" . $used.";"; - $c_output .= ($o_warn ==0)? ";" : round($o_warn * $total/100,0).";"; - $c_output .= ($o_crit ==0)? ";" : round($o_crit * $total/100,0).";"; - $c_output .= "0;" . $total ; - } - $session->close; - print "$c_output \n"; - exit $ERRORS{$c_status}; + + # Check if at least 1 memory slots exists + if ($nindex == 0) { + printf("ERROR: No memory slots found"); + exit $ERRORS{"UNKNOWN"}; + } + + # Consolidate the datas + my ($total,$free)=(0,0); + my ($c_output,$prct_free)=(undef,undef); + foreach (@index) { + $c_output .="," if defined ($c_output); + $total += $$resultat{$hp_mem_total . "." . $_}; + $free += $$resultat{$hp_mem_free . "." . $_}; + $c_output .= "Slot " . $$resultat{$hp_mem_index . "." . $_} . ":" + .round( + 100 - ($$resultat{$hp_mem_free . "." . $_} *100 / + $$resultat{$hp_mem_total . "." . $_}) ,0) + . "%"; + } + my $used = $total - $free; + $prct_free=round($used*100/($total),0); + verb("Used : $used, Free: $free, Output : $c_output"); + my $c_status="OK"; + $c_output .=" : " . $prct_free ."% : "; + if (($o_crit!=0)&&($o_crit <= $prct_free)) { + $c_output .= " > " . $o_crit ; + $c_status="CRITICAL"; + } else { + if (($o_warn!=0)&&($o_warn <= $prct_free)) { + $c_output.=" > " . $o_warn; + $c_status="WARNING"; + } + } + $c_output .= " ; ".$c_status; + if (defined ($o_perf)) { + $c_output .= " | ram_used=" . $used.";"; + $c_output .= ($o_warn ==0)? ";" : round($o_warn * $total/100,0).";"; + $c_output .= ($o_crit ==0)? ";" : round($o_crit * $total/100,0).";"; + $c_output .= "0;" . $total ; + } + print "$c_output \n"; + exit $ERRORS{$c_status}; } ########### Net snmp memory check ############ if (defined ($o_netsnmp)) { - # Get NetSNMP memory values - $resultat = (Net::SNMP->VERSION < 4) ? - $session->get_request(@nets_oids) - :$session->get_request(-varbindlist => \@nets_oids); - - if (!defined($resultat)) { - printf("ERROR: netsnmp : %s.\n", $session->error); - $session->close; - exit $ERRORS{"UNKNOWN"}; - } - - my ($realused,$swapused)=(undef,undef); - - $realused= defined($o_cache) ? - ($$resultat{$nets_ram_total}-$$resultat{$nets_ram_free})/$$resultat{$nets_ram_total} - : - ($$resultat{$nets_ram_total}-($$resultat{$nets_ram_free}+$$resultat{$nets_ram_cache}))/$$resultat{$nets_ram_total}; + # Get NetSNMP memory values + $resultat = Centreon::SNMP::Utils::get_snmp_leef(\@nets_oids, $session, $ERRORS{'UNKNOWN'}); - if($$resultat{$nets_ram_total} == 0) { $realused = 0; } + my ($realused,$swapused)=(undef,undef); - $swapused= ($$resultat{$nets_swap_total} == 0) ? 0 : - ($$resultat{$nets_swap_total}-$$resultat{$nets_swap_free})/$$resultat{$nets_swap_total}; - $realused=round($realused*100,0); - $swapused=round($swapused*100,0); - defined($o_cache) ? - verb ("Ram : $$resultat{$nets_ram_free} / $$resultat{$nets_ram_total} : $realused") - : - verb ("Ram : $$resultat{$nets_ram_free} ($$resultat{$nets_ram_cache} cached) / $$resultat{$nets_ram_total} : $realused"); - verb ("Swap : $$resultat{$nets_swap_free} / $$resultat{$nets_swap_total} : $swapused"); - - my $n_status="OK"; - my $n_output="Ram : " . $realused . "%, Swap : " . $swapused . "% :"; - if ((($o_critR!=0)&&($o_critR <= $realused)) || (($o_critS!=0)&&($o_critS <= $swapused))) { - $n_output .= " > " . $o_critR . ", " . $o_critS; - $n_status="CRITICAL"; - } else { - if ((($o_warnR!=0)&&($o_warnR <= $realused)) || (($o_warnS!=0)&&($o_warnS <= $swapused))) { - $n_output.=" > " . $o_warnR . ", " . $o_warnS; - $n_status="WARNING"; - } - } - $n_output .= " ; ".$n_status; - if (defined ($o_perf)) { - if (defined ($o_cache)) { - $n_output .= " | ram_used=" . ($$resultat{$nets_ram_total}-$$resultat{$nets_ram_free}).";"; - } - else { - $n_output .= " | ram_used=" . ($$resultat{$nets_ram_total}-$$resultat{$nets_ram_free}-$$resultat{$nets_ram_cache}).";"; - } - $n_output .= ($o_warnR ==0)? ";" : round($o_warnR * $$resultat{$nets_ram_total}/100,0).";"; - $n_output .= ($o_critR ==0)? ";" : round($o_critR * $$resultat{$nets_ram_total}/100,0).";"; - $n_output .= "0;" . $$resultat{$nets_ram_total}. " "; - $n_output .= "swap_used=" . ($$resultat{$nets_swap_total}-$$resultat{$nets_swap_free}).";"; - $n_output .= ($o_warnS ==0)? ";" : round($o_warnS * $$resultat{$nets_swap_total}/100,0).";"; - $n_output .= ($o_critS ==0)? ";" : round($o_critS * $$resultat{$nets_swap_total}/100,0).";"; - $n_output .= "0;" . $$resultat{$nets_swap_total}; - } - $session->close; - print "$n_output \n"; - exit $ERRORS{$n_status}; + $realused= defined($o_cache) ? + ($$resultat{$nets_ram_total}-$$resultat{$nets_ram_free})/$$resultat{$nets_ram_total} + : + ($$resultat{$nets_ram_total}-($$resultat{$nets_ram_free}+$$resultat{$nets_ram_cache}))/$$resultat{$nets_ram_total}; + if($$resultat{$nets_ram_total} == 0) { $realused = 0; } + + $swapused= ($$resultat{$nets_swap_total} == 0) ? 0 : + ($$resultat{$nets_swap_total}-$$resultat{$nets_swap_free})/$$resultat{$nets_swap_total}; + $realused=round($realused*100,0); + $swapused=round($swapused*100,0); + defined($o_cache) ? + verb ("Ram : $$resultat{$nets_ram_free} / $$resultat{$nets_ram_total} : $realused") + : + verb ("Ram : $$resultat{$nets_ram_free} ($$resultat{$nets_ram_cache} cached) / $$resultat{$nets_ram_total} : $realused"); + verb ("Swap : $$resultat{$nets_swap_free} / $$resultat{$nets_swap_total} : $swapused"); + + my $n_status="OK"; + my $n_output="Ram : " . $realused . "%, Swap : " . $swapused . "% :"; + if ((($o_critR!=0)&&($o_critR <= $realused)) || (($o_critS!=0)&&($o_critS <= $swapused))) { + $n_output .= " > " . $o_critR . ", " . $o_critS; + $n_status="CRITICAL"; + } else { + if ((($o_warnR!=0)&&($o_warnR <= $realused)) || (($o_warnS!=0)&&($o_warnS <= $swapused))) { + $n_output.=" > " . $o_warnR . ", " . $o_warnS; + $n_status="WARNING"; + } + } + $n_output .= " ; ".$n_status; + if (defined ($o_perf)) { + if (defined ($o_cache)) { + $n_output .= " | ram_used=" . ($$resultat{$nets_ram_total}-$$resultat{$nets_ram_free}).";"; + } else { + $n_output .= " | ram_used=" . ($$resultat{$nets_ram_total}-$$resultat{$nets_ram_free}-$$resultat{$nets_ram_cache}).";"; + } + $n_output .= ($o_warnR ==0)? ";" : round($o_warnR * $$resultat{$nets_ram_total}/100,0).";"; + $n_output .= ($o_critR ==0)? ";" : round($o_critR * $$resultat{$nets_ram_total}/100,0).";"; + $n_output .= "0;" . $$resultat{$nets_ram_total}. " "; + $n_output .= "swap_used=" . ($$resultat{$nets_swap_total}-$$resultat{$nets_swap_free}).";"; + $n_output .= ($o_warnS ==0)? ";" : round($o_warnS * $$resultat{$nets_swap_total}/100,0).";"; + $n_output .= ($o_critS ==0)? ";" : round($o_critS * $$resultat{$nets_swap_total}/100,0).";"; + $n_output .= "0;" . $$resultat{$nets_swap_total}; + } + print "$n_output \n"; + exit $ERRORS{$n_status}; }