document solution
[dell-switch] / snmp-port-status.sh
1 #!/bin/bash -e
2
3 # modified from https://gist.github.com/krokodilerian/a88b4ae992706c22e0b0
4 # see /var/lib/snmp/mibs/ietf/IF-MIB
5
6 if [ -z "$1" ]; then
7         echo Usage: "$0" hostname ifAdminStatus BRIDGE-MIB::dot1dStpPortState ifInErrors ifOutErrors ifInDiscards
8         exit 4
9 fi
10
11 log=/dev/shm/port-status/
12 test -d $log || mkdir $log
13
14 sw="$1"
15 shift # rest of arguments are IfEntry SEQUENCE
16 . ./snmp.conf
17
18 extra=$*
19 snmpwalk="snmpwalk -Oqs -v2c -Cc -c $COMMUNITY $sw"
20
21 fping $sw 2>>/dev/shm/dead
22
23 :> $log/$sw
24
25 for oid in ifName ifHighSpeed ifOperStatus $extra ifType ifAlias
26 do
27         echo -n "# snmpwalk $sw [$oid] = " >/dev/stderr
28
29         $snmpwalk $oid | cut -d. -f2- | tee $log/$sw-$oid | wc -l >/dev/stderr
30
31         # put [] around alias and remove empty ones
32         if [ "$oid" = 'ifAlias' ] ; then
33                 cat $log/$sw-$oid | sed -e 's/ / [/' -e 's/$/]/' -e 's/ \[\]$//' > $log/$sw-$oid.new && mv $log/$sw-$oid.new $log/$sw-$oid
34         fi
35
36         if [ ! -s $log/$sw ] ; then
37                 mv $log/$sw-$oid $log/$sw
38         else
39                 join -a 1 $log/$sw $log/$sw-$oid > $log/$sw.new && mv $log/$sw.new $log/$sw
40                 rm $log/$sw-$oid
41         fi
42 done
43
44 # add switch name prefix
45 cat $log/$sw | sed "s/^/$sw /" > $log/$sw.new && mv $log/$sw.new $log/$sw
46
47 cat $log/$sw
48
49 test ! -z "$extra" && exit 0 # don't commit if we have custom oids
50
51 ports_changed=`cd $log && git diff $sw | grep '^-' | awk '{ print $3 }' | tr '\n' ' '`
52 if [ ! -z "$ports_changed" ] ; then
53         cd $log && git commit -m "$sw : $ports_changed" $log/$sw
54 fi