X-Git-Url: https://defaria.com/gitweb/?a=blobdiff_plain;f=clients%2FHP%2Fbin%2Fwhosdown;fp=clients%2FHP%2Fbin%2Fwhosdown;h=8871a4a8e8a3f4cf010e6c99d725e1f8828f03f8;hb=a8c84d2892f07a6863b68a11eb0a4a79ffd71fb5;hp=0000000000000000000000000000000000000000;hpb=95384f94f88aceeb5eef2d322210ba4a438b6512;p=clearscm.git diff --git a/clients/HP/bin/whosdown b/clients/HP/bin/whosdown new file mode 100644 index 0000000..8871a4a --- /dev/null +++ b/clients/HP/bin/whosdown @@ -0,0 +1,199 @@ +#!/bin/ksh +################################################################################ +# +# File: whosedown +# Description: Pings machines listed in machines database and produces a report +# about which machines are down +# Author: Andrew@DeFaria.com +# Created: Thu Oct 5 09:32:21 PDT 2000 +# Language: Korn Shell +# +# (c) Copyright 2001, Andrew@DeFaria.com, all rights reserved +# +################################################################################ +# Set me to command name +me=$(basename $0) + +# Set adm_base +adm_base=${adm_base:-$HOME/adm} + +# Set adm_fpath +adm_fpath=${adm_fpath:-$adm_base/functions} + +# Source functions +. $adm_fpath/common + +# Set machines +machines=${machines:-$adm_base/data/machines} + +function usage { + if [ "_$1" != "_" ]; then + display "$1" + display + fi + display "Usage: $me [-[c|ount] n | -[u|p] [-nocolor]" + display + display "Where:" + display "\t-c|ount:\tNumber of pings to attempt" + display "\t-u|p:\t\tReport machines that are up too" + display "\t-nocolor\tDo not produce color output" + exit 1 +} # usage + +function print_totals { + # Print totals + display_stderr + display_stderr - ------------------------ + + if [ "$up" = "true" ]; then + display_stderr "Total machines:\t$total_machines" + display_stderr "Total up:\t$total_up" + fi + if [ $total_down -ne 0 ]; then + display_stderr "Total down:\t$total_down" + fi + if [ $total_weak -ne 0 ]; then + display_stderr "Total weak:\t$total_week" + fi + + exit +} # print_totals + +# Totals +integer total_machines=0 +integer total_up=0 +integer total_down=0 +integer total_weak=0 + +# Get parameters +integer count=2 +up=false +if [ "$interactive" = "true" ]; then + color_output=true +else + color_output=false +fi + +while [ $# -ge 1 ]; do + case "$1" in + -usage) + usage + ;; + + -v|-verbose) + verbose=yes + ;; + + -d|-debug) + debug=yes + ;; + + -c|-count) + if [[ $# -lt 2 ]]; then + error "Count not specified" 1 + else + shift + count=$1 + fi + ;; + + -u|-up) + up=true + ;; + + -nocolor) + color_output=false + ;; + + *) + usage "Unrecognized parameter $1" + ;; + esac + shift +done + +if [ "$color_output" = "true" ]; then + # Define some colors + esc=$(print "\033") + + if [ "$TERM" = "vt100" -o "$TERM" = "vt220" ]; then + normal="$esc[0m" + up_color="$esc[1m" + limping_color="$esc[4m" + down_color="$esc[5m" + elif [ "$TERM" = "dtterm" -o -z DTTERM ]; then + normal="$esc[39m" + up_color="$esc[32m" + limping_color="$esc[35m" + down_color="$esc[31m" + elif [ "$TERM" = "hp" -o "$TERM" = "hpterm" ]; then + normal="$esc&d@$esc&v0S" + down_color="$esc&v1S" + limping_color="$esc&v5S" + up_color="$esc&v2S" + fi +fi + +# Print heading +display_stderr "Machine\t\tState" +display_stderr - --------\\t-------- + +trap print_totals INT + +# Check each known machine +for machine in $(grep -v ^# $machines | cut -f1 -d:); do + let total_machines=total_machines+1 + + if [ "$up" = "true" ]; then + # If we are displaying up machine then print the machine name first + display "$machine\t\c" + if [ ${#machine} -lt 8 ]; then + display "\t\c" + fi + fi + + # ping the machine + ping_result=$(ping $machine -n $count | tail -1 | cut -c44-) + integer state=0 + + # Translate the return string to states + case "$ping_result" in + "100% packet loss") # Total packet loss - machine is downes + state=1 + ;; + + "") # No packet loss - machine is fine + state=0 + ;; + + *) # Some other percentage of packet loss - machine is limping + state=2 + ;; + esac + + debug "Pinged $machine; result = $ping_result; state = $state" + + # Output based on state + if [ $state -eq 0 ]; then + if [ "$up" = "true" ]; then + let total_up=total_up+1 + display "${up_color}Up${normal}" + fi + else + if [ "$up" = "false" ]; then + display "$machine\t\c" + if [ ${#machine} -lt 8 ]; then + display "\t\c" + fi + fi + if [ $state -eq 1 ]; then + let total_down=total_down+1 + display "${down_color}Down${normal}" + else + let total_weak=total_weak+1 + display "${limping_color}Weak response${normal}" + fi + fi +done + +print_totals