packages: nagios-plugin-check_fcsw/check_fcsw (NEW), nagios-plugin-check_fc...
glen
glen at pld-linux.org
Tue Oct 20 21:38:48 CEST 2009
Author: glen Date: Tue Oct 20 19:38:48 2009 GMT
Module: packages Tag: HEAD
---- Log message:
- new
---- Files affected:
packages/nagios-plugin-check_fcsw:
check_fcsw (NONE -> 1.1) (NEW), check_fcsw.cfg (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: packages/nagios-plugin-check_fcsw/check_fcsw
diff -u /dev/null packages/nagios-plugin-check_fcsw/check_fcsw:1.1
--- /dev/null Tue Oct 20 21:38:48 2009
+++ packages/nagios-plugin-check_fcsw/check_fcsw Tue Oct 20 21:38:43 2009
@@ -0,0 +1,148 @@
+#!/usr/bin/perl
+=pod
+
+=head1 NAME
+
+check_fcsw.pl - Check Fibre Card Switch
+
+=head1 DESCRIPTION
+
+This script checks Fibre Card Switch ports state.
+
+So far written for EMC Fibre Channel Switch.
+
+=head1 AUTHORS
+
+Elan Ruusamäe <glen at delfi.ee>
+
+=head1 LICENSE
+
+GPL v2
+
+=cut
+
+use strict;
+use Nagios::Plugin::SNMP;
+
+my $LABEL = 'FC-SWITCH';
+my $plugin = Nagios::Plugin::SNMP->new(
+ 'shortname' => $LABEL,
+ 'usage' => 'USAGE: %s'
+);
+
+$plugin->getopts;
+
+my $DEBUG = $plugin->opts->get('snmp-debug');
+
+# FIBRE-CHANNEL-MGMT-MIB
+my %fcConnUnitPortType = (
+ unknown => 1,
+ other => 2,
+ notPresent => 3,
+ hubPort => 4,
+ nPort => 5,
+ lPort => 6,
+ flPort => 7,
+ fPort => 8,
+ ePort => 9,
+ gPort => 10,
+ domainController => 11,
+ hubController => 12,
+ scsi => 13,
+ escon => 14,
+ lan => 15,
+ wan => 16,
+ wdm => 17,
+ ib => 18,
+ ipstore => 19,
+);
+
+my %fcConnUnitPortStatus = (
+ unknown => 1,
+ unused => 2,
+ ok => 3,
+ warning => 4,
+ failure => 5,
+ notParticipating => 6,
+ initializing => 7,
+ bypassed => 8,
+);
+
+# These are all tables, one entry in each per interface
+my %oids = qw(
+ .1.3.6.1.2.1.8888.1.1.6.1.2 fcConnUnitPortType
+ .1.3.6.1.2.1.8888.1.1.6.1.6 fcConnUnitPortStatus
+);
+
+my %res;
+while (my($oid, $key) = each %oids) {
+ debug("Walking table $oid");
+
+ my $results = $plugin->walk($oid);
+ for my $result (keys %$results) {
+ my $table = $results->{$result};
+ for my $item (keys %$table) {
+ my ($base, $idx) = ($item =~ m/^(.+)\.(\d+)$/);
+
+ debug("$idx: $key = $table->{$item}");
+
+ $res{$idx} = {} unless exists $res{$idx};
+ $res{$idx}->{$key} = $table->{$item};
+ }
+ }
+}
+# Close and destroy session
+$plugin->close();
+
+unless (%res) {
+ print "$LABEL: No SNMP results\n";
+ exit UNKNOWN;
+}
+
+my (%ok, %skip, %error);
+my $level = OK;
+for my $idx (sort {$a <=> $b} keys %res) {
+ my %res = %{$res{$idx}};
+ my ($type, $status) = ($res{'fcConnUnitPortType'}, $res{'fcConnUnitPortStatus'});
+
+ if ($type == $fcConnUnitPortType{notPresent} || $status == $fcConnUnitPortStatus{unused}) {
+ $skip{$idx} = "unused";
+ debug("$idx: skip not present or unused port");
+ next;
+ }
+
+ if ($status == $fcConnUnitPortStatus{ok}) {
+ $ok{$idx} = 'OK';
+ next;
+ }
+
+ $level = CRITICAL;
+
+ my %map = reverse %fcConnUnitPortStatus;
+ $error{$idx} = $map{$status};
+}
+
+
+my $nports = keys(%ok) + keys(%skip) + keys(%error);
+my @msg = keys(%ok)." of $nports ports OK";
+
+if (keys %error) {
+ my %state;
+ for my $idx (sort {$a <=> $b} keys %error) {
+ my $state = $error{$idx};
+ push(@{$state{$state}}, $idx);
+ }
+ while (my($state, $list) = each %state) {
+ push(@msg, "$state: ".join(', ', @$list));
+ }
+}
+
+print "$LABEL: ", join('; ', @msg), "\n";
+exit $level;
+
+sub debug {
+ return unless $DEBUG == 1;
+ my $msg = shift;
+
+ print STDERR scalar(localtime()) . ": $msg\n";
+}
================================================================
Index: packages/nagios-plugin-check_fcsw/check_fcsw.cfg
diff -u /dev/null packages/nagios-plugin-check_fcsw/check_fcsw.cfg:1.1
--- /dev/null Tue Oct 20 21:38:48 2009
+++ packages/nagios-plugin-check_fcsw/check_fcsw.cfg Tue Oct 20 21:38:43 2009
@@ -0,0 +1,27 @@
+# Usage:
+# check_fcsw
+# --hostname|-H HOST
+# --port|-p INT
+# --snmp-version 1|2c|3
+# [--snmp-timeout INT]
+# [--snmp-local-ip IP]
+# [--warning|-w STRING] [--critical|-c STRING]
+# [--rocommunity S] |
+# [--auth-username S --auth-password S [--auth-protocol S]]
+
+define command {
+ command_name check_fcsw
+ command_line @plugindir@/check_fcsw -H $HOSTADDRESS$ $ARG1$
+}
+
+define service {
+ use generic-service
+ name fcsw
+ service_description fcsw
+ register 0
+
+ normal_check_interval 10
+ retry_check_interval 5
+
+ check_command check_fcsw
+}
================================================================
More information about the pld-cvs-commit
mailing list