--- check_iftraffic.orig.pl 2011-01-22 14:52:26.659081564 +0100 +++ check_iftraffic.pl 2011-01-22 14:50:53.634106388 +0100 @@ -13,6 +13,8 @@ # - Option -x -> new option for debugging purposes , see --help # - Do not die, if file could not be opened -> return UNKNOWN # - Implementing snmp v2 +# 2011-01-22 Herbert Straub +# - Implementing Bit/s, Option -o # # mw = Markus Werner mw+nagios@wobcom.de # Remarks (mw): @@ -69,7 +71,7 @@ my $iface_number; my $iface_descr; my $iface_speed; -my ( $opt_h, $opt_license, $opt_version ); +my ( $opt_h, $opt_license, $opt_version, $opt_output ); my $units; my ( $snmpIfInOctets, $snmpIfOutOctets ); my $snmpIfDescr = '1.3.6.1.2.1.2.2.1.2'; @@ -79,7 +81,8 @@ my $snmp_version = 1; my @snmpoids; my $response; -my $version = "2.0"; +my $version = "2.1"; +my $output; # Path to tmp files # FIXME: Straub: change to /var/lib/..., becaues data lost on tempfs filesystems! @@ -116,6 +119,7 @@ "d|directory=s" => \$directory, "x|history" => \$history_flag, "v|version" => \$opt_version, + "o|output=s" => \$opt_output, ); if ( $status == 0 ) { @@ -137,6 +141,16 @@ print_usage(); } +if ( ( $opt_output ) and + ( $opt_output ne "bits" and $opt_output ne "Bytes" ) ) { + print "Error, you can only specify bits or Bytes for option -o\n"; + exit $STATUS_CODE{'UNKNOWN'}; +} + +if ( ! $opt_output ) { + $opt_output = "Bytes"; +} + # SNMP OIDs for Traffic if ($snmp_version =~ /^1$/ ) { $snmpIfInOctets = '1.3.6.1.2.1.2.2.1.10'; @@ -243,15 +257,31 @@ my $exit_status = "OK"; -my $output = "Total RX Bytes: $in_bytes B, Total TX Bytes: $out_bytes B
"; -$output .= - "Average Traffic: $in_traffic " - . "B/s (" - . $in_usage - . "%) in, $out_traffic " - . "B/s (" - . $out_usage - . "%) out"; +if ( $opt_output eq "Bytes" ) { + $output = "Total RX Bytes: $in_bytes B, Total TX Bytes: $out_bytes B
"; + $output .= + "Average Traffic: $in_traffic " + . "B/s (" + . $in_usage + . "%) in, $out_traffic " + . "B/s (" + . $out_usage + . "%) out"; +} else { + $output = sprintf( "Total RX bits: %u B, Total TX Bytes: %u bits
" + , $in_bytes * 8, $out_bytes * 8 ); + $output .= + "Average Traffic: " + . $in_traffic * 8 + . " bit/s (" + . $in_usage + . "%) in, " + . $out_traffic * 8 + . " bit/s (" + . $out_usage + . "%) out"; +} + if ( ( $in_usage > $crit_usage ) or ( $out_usage > $crit_usage ) ) { $exit_status = "CRITICAL"; @@ -268,10 +298,19 @@ $warn_abs=sprintf("%.0f", $iface_speed/100*$warn_usage); $crit_abs=sprintf("%.0f",$iface_speed/100*$crit_usage); -$output .= -"|inUsage=$in_usage%;$warn_usage;$crit_usage;; outUsage=$out_usage%;$warn_usage;$crit_usage;; " - . "inAbsolut=".$in_traffic_absolut."B;$warn_abs;$crit_abs;; " - . "outAbsolut=".$out_traffic_absolut."B;$warn_abs;$crit_abs;;\n"; +if ( $opt_output eq "Bytes" ) { + $output .= "|inUsage=$in_usage%;$warn_usage;$crit_usage;; " + . "outUsage=$out_usage%;$warn_usage;$crit_usage;; " + . "inAbsolut=".$in_traffic_absolut."B;$warn_abs;$crit_abs;; " + . "outAbsolut=".$out_traffic_absolut."B;$warn_abs;$crit_abs;;\n"; +} else { + $output .= "|inUsage=$in_usage%;$warn_usage;$crit_usage;; " + . "outUsage=$out_usage%;$warn_usage;$crit_usage;; " + . "inAbsolut=" . $in_traffic_absolut * 8 . "bit;" + . $warn_abs * 8 .";" . $crit_abs * 8 . ";; " + . "outAbsolut=" . $out_traffic_absolut * 8 . "bit;" + . $warn_abs * 8 . ";" . $crit_abs * 8 . ";;\n"; +} print $output; exit( $STATUS_CODE{$exit_status} ); @@ -358,7 +397,7 @@ print < + Copyright (C) 2006,2007,2009,2011 Herbert Straub Version: $version @@ -417,6 +456,12 @@ http://en.wikipedia.org/wiki/Gibit http://en.wikipedia.org/wiki/Gbit + -o --output Bytes | bits (default is Bytes) + Specify the output unit. The default is Bytes/s + For a detailed description read: + http://en.wikipedia.org/wiki/Bit + http://en.wikipedia.org/wiki/Bytes + -w --warning INTEGER % of bandwidth usage necessary to result in warning status. Default: 85% @@ -449,7 +494,7 @@ print < + Copyright (C) 2006,2007,2009,2011 Herbert Straub This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License