diff options
Diffstat (limited to 'functions/tech-support-brief')
-rwxr-xr-x | functions/tech-support-brief | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/functions/tech-support-brief b/functions/tech-support-brief new file mode 100755 index 0000000..0521416 --- /dev/null +++ b/functions/tech-support-brief @@ -0,0 +1,150 @@ +# implement "show tech-support brief" +# usage: tech-support [brief] [ save [ <filename> ] ] +# NOTE: this file is sourced, NOT executed + +function header { + echo + echo ---------------- + echo "$*" + echo ---------------- +} + +# by default send to stdout +OUT=1 +FLAG=0 +REMOTE=0 +DEFAULT_PATH=/opt/vyatta/etc/config/support +DEFAULT_GROUP=users + +do_rotate () +{ + local count=`ls -t $DEFAULT_PATH/*.tech-support.* 2>/dev/null |wc -l` + if (( count >= 10 )); then + local dfile=`ls -t $DEFAULT_PATH/*.tech-support.* 2>/dev/null |tail -1` + rm -f $dfile >&/dev/null \ + && echo "Removed old tech-support brief output file '$dfile'" + fi +} + +HOSTNAME=`hostname` +CURTIME=`date +%F-%H%M%S` + if [ "$1" == "save-uncompressed" ]; then + FLAG="1" + elif [ "$1" == "save" ]; then + FLAG="0" + fi + + if [ "$1" == "save" ] || [ "$1" == "save-uncompressed" ]; then + # "save" or save-uncompressed is specified. save output to file. + if [ -n "$2" ]; then + if [[ "$2" =~ scp:///* ]]; then + OUT="$HOSTNAME.tech-support.$CURTIME" + REMOTE="1" + elif [[ "$2" =~ ftp:///* ]]; then + OUT="$HOSTNAME.tech-support.$CURTIME" + REMOTE="1" + else + OUT="$2.$HOSTNAME.tech-support.$CURTIME" + fi + else + OUT="$HOSTNAME.tech-support.$CURTIME" + fi + +if [[ $OUT != /* ]]; then + # it's not absolute path. save in default path. + mkdir -p $DEFAULT_PATH >& /dev/null + chgrp $DEFAULT_GROUP $DEFAULT_PATH >& /dev/null + chmod 775 $DEFAULT_PATH >& /dev/null + OUT="$DEFAULT_PATH/$OUT" + do_rotate + fi + if ! touch $OUT >& /dev/null; then + echo "Cannot create tech-support file '$OUT'" + exit 1 + fi + if [ $REMOTE != "1" ]; then + echo "Saving output to '$OUT'..." + fi + +fi + +( +export PATH=/sbin:/usr/sbin:$PATH + +header Show Tech-Support Brief +header CONFIGURATION + + +header Vyatta Version and Package Changes +show version all + +header Running configuration +show configuration + +header INTERFACES + +header Interfaces +show interfaces + +header ROUTING + +function show_route_limit () +{ + NUM=$(show $1 route $2 | wc -l) + # subtract 3 lines of header + [ $NUM -gt 3 ] && NUM=$[$NUM - 3] + OUTPUT=$(echo show $1 route $2 \(total $NUM\)) + CMD="show $1 route $2" + if [ $3 -eq 0 ] + then + header $OUTPUT + vtysh -c "$CMD" + else + header "$OUTPUT- limit $3" + vtysh -c "$CMD" | head -n $3 + fi +} + +# +# show all connected/static, limit the output others and include a total +# +show_route_limit ip connected 0 +show_route_limit ip static 0 +show_route_limit ip rip 500 +show_route_limit ip ospf 500 +show_route_limit ip bgp 500 +show_route_limit ip '' 500 + +show_route_limit ipv6 connected 0 +show_route_limit ipv6 static 0 +show_route_limit ipv6 ripng 500 +show_route_limit ipv6 ospf6 500 +show_route_limit ipv6 bgp 500 +show_route_limit ipv6 '' 500 + + +header Recent 100 Log Messages +show log tail 100 + +header "END OF TECH-SUPPORT BRIEF FILE" +) 1>&$OUT 2>&1 + +if [ $OUT != "1" ]; then + chgrp $DEFAULT_GROUP $OUT >& /dev/null + chmod 664 $OUT >& /dev/null + if [ $FLAG == "0" ]; then + gzip $OUT + OUT=$OUT.gz + if [ $REMOTE != "1" ]; then + echo "File $OUT is the compressed file." + fi + fi + + if [ $REMOTE != "1" ]; then + echo "Done." + fi +fi +if [ $REMOTE == "1" ]; then + perl /opt/vyatta/bin/vyatta-remote-copy.pl $2 $OUT $FLAG +fi + |