User Tools

Site Tools


aix:scripts_category:nagios_aix_count_paths
[root@aixa001]/root/scripts> cat count_path.sh
#!/bin/bash
#set -x
#############################################
#@(#) Count the number of path on disks (multipathing)
#############################################
# version 1.0 10-2019 Manu
#############################################

VERBOSE=0
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
STATE_DEPENDENT=4
EXITSTATUS=$STATE_UNKNOWN # Default Exit Code as UNKNOWN.
EXITSTATUS=0
EXITOUTPUT=""

logpath=/root/scripts/logs
output=$logpath/path_count.out

cat /dev/null > $output

numberpath=8

# ($execute) &&  execute=true

os=$(uname -a | awk '{print $1}')

grepp() { [ $# -eq 1 ] && perl -00ne "print if /$1/i" || perl -00ne "print if /$1/i" < "$2";}

count_linux_path()
{
#for disk in $(/usr/sbin/multipath -ll | awk '{print $1}' | grep '^mpath')
#do
#  echo $disk $(/usr/sbin/multipath -ll | grep -v "policy=" | grep -v "size=" | sed '/^mpath/i \\n' | grepp $disk | grep -v '^mpath' | grep active | wc -l) | sed 's/\ /;/g' | sed 's/$/;/' | sed "s/$/$numberpath;/" >> $output
#done


#for disk in $(/usr/sbin/multipath -ll | awk '{print $1}' | egrep '^[a-z]|^[A-Z]' | grep -v 'size=')
#do 
#  echo $disk $(/usr/sbin/multipath -ll | grep -v "policy=" | grep -v "size=" | sed '/^[a-z]/i \\n' | sed '/^[A-Z]/#i \\n' | grepp $disk | grep -v "^$disk" | grep active | wc -l) | sed 's/\ /;/g' | sed 's/$/;/' | sed "s/$/#$numberpath;/" >> $output
#done

# improvement with customized mpath name
list_disk=$(/usr/sbin/multipath -ll | grep -v "policy=" | grep -v "size=" | sed 's/\ /;/g')

for disk in $(echo ${list_disk} | tr ' ' '\n' | egrep '^[a-z]|^[A-Z]' | cut -d';' -f1)
do
  echo $disk $(echo ${list_disk} | tr ' ' '\n' | sed '/^[a-z]/i \\n' | sed '/^[A-Z]/i \\n' | grepp $disk | grep -v "^$disk" | grep active | wc -l) | sed 's/\ /;/g' | sed 's/$/;/' | sed "s/$/$numberpath;/" >> $output
done


($verbose) && cat $output
}

count_aix_path()
{
for i in $(lspv | awk '{print $1}')
do
  echo $i $(lspath -l $i | grep Enabled | wc -l) | sed 's/\ /;/g' | sed 's/$/;/' | sed "s/$/$numberpath;/" >> $output
done

($verbose) && cat $output
}


verbose=false #preview only
while [ $# -gt 0 ]
do
   case "$1" in
      -v) verbose=true ;;
   esac
   shift
done

if [ "$os" = "Linux" ]
then
  count_linux_path
else
  if [ "$os" = "AIX" ]
  then
    count_aix_path
  else
    EXITSTATUS=$STATE_UNKNOWN
    EXITOUTPUT="Unknown OS"
  fi
fi

if [ "$EXITOUTPUT" = "" ]
then
  for line in $(cat $output)
  do
    curpath=$(echo $line | awk -F ';' '{print $2}')
    maxpath=$numberpath
    halfpath=$(echo "scale=0;$maxpath/2" | bc)
    if [ "$curpath" -lt "$halfpath" ]
    then
      EXITSTATUS=$STATE_CRITICAL
      EXITOUTPUT=$(echo "$EXITOUTPUT $line")
    else
      if [ "$curpath" -lt "$maxpath" ]
      then
        if [ "$EXITSTATUS" -lt "$STATE_WARNING" ]
        then
          EXITSTATUS=$STATE_WARNING
        fi
        EXITOUTPUT=$(echo "$EXITOUTPUT $line")
      fi
    fi
  done
fi

case "$EXITSTATUS" in
  "$STATE_OK" )         EXITOUTPUT="Paths Status OK" ;;
  "$STATE_WARNING" )    EXITOUTPUT=$(echo "WARNING: Missing disk paths: $EXITOUTPUT") ;;
  "$STATE_CRITICAL" )   EXITOUTPUT=$(echo "CRITICAL: Error disk paths: $EXITOUTPUT") ;;
esac

### EOF SECTION

rm -f $output 2>/dev/null
echo $EXITOUTPUT
exit $EXITSTATUS
aix/scripts_category/nagios_aix_count_paths.txt · Last modified: 2025/03/24 18:45 by manu