First commit

This commit is contained in:
2018-03-13 08:04:28 +01:00
commit 196a7d2af6
32 changed files with 33836 additions and 0 deletions

155
syno/script2.sh Executable file
View File

@@ -0,0 +1,155 @@
#!/bin/bash
#====================================================================
# Reads free diskspace on remote hosts via snmp.
#
# Requires Net-SNMP: http://net-snmp.sourceforge.net/
#
# Jonathan Baxter jbaxter@panscient.com 20080426
#
# Copyright (C) 2008, Jonathan Baxter
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
#====================================================================
function usage() {
echo
echo "Usage: $0 [-cp] host [host...]";
echo "Print fixed disks on the specified host(s) with free space below threshold"
echo
echo " -c snmp community string (default: \"public\")"
echo " -p percent free threshold (default: 10%)"
echo
echo "Report bugs to jbaxter@panscient.com"
echo
}
#===================
# Process options
#===================
while getopts ":c:p:" option; do
case $option in
c ) community="$OPTARG"; shift $((OPTIND-1)); OPTIND=1;;
p ) percent_free_threshold="$OPTARG"; shift $((OPTIND-1)); OPTIND=1;;
h ) usage; exit 0;;
\? ) usage; exit 1;;
* ) usage; exit 1;;
esac
done
community=${community-public}
percent_free_threshold=${percent_free_threshold-10}
snmp_ver="1"
if [ "$1" = "" ]; then
echo $usage
exit 1
fi
#=============================================================================
# Reads the free space on fixed disks on the specified host
#
# $1: host
# return: line for each fixed disk: <name> <size MB> <used MB> <percent free>
#=============================================================================
function read_fixed_diskspace()
{
local data host type desc au size used
host=$1
data="$(snmpwalk -c public -v 1 -OqUes $host hrStorage 2>&1)"
if [ "$?" != "0" ]; then
echo -e "$data"
return 1;
fi
while read nameid value junk; do
name=${nameid%%.*}
#echo $name
id=${nameid/$name.}
lastid=$id
case "$name" in
"hrStorageType" ) type[$id]=$value;;
"hrStorageDescr" ) desc[$id]=$value;;
"hrStorageAllocationUnits" ) au[$id]=$value;;
"hrStorageSize" ) size[$id]=$value;;
"hrStorageUsed" ) used[$id]=$value;;
* ) ;;
esac
done < <(echo -e "$data")
i="0"
while [[ i -lt ${lastid} ]]; do
if [[ ("${type[$i]}" = "hrStorageFixedDisk") &&
("${size[$i]-0}" != "0") &&
("${au[$i]-0}" != "0") ]]; then
sizeMB=$(( (${au[$i]} * (${size[$i]} / 1024) / 1024) ))
usedMB=$(( (${au[$i]} * (${used[$i]} / 1024) / 1024) ))
percent_free=$((100 * ( $sizeMB - $usedMB ) / $sizeMB))
echo "${desc[$i]} ${sizeMB} ${usedMB} $percent_free\n"
fi
let i=i+1;
done
}
#============================================
# Insert commas as appropriate into integers
# $1: integer, eg: 5555555
# return: commaized integer, eg: 5,555,555
#============================================
function commaize() {
echo $1 | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta'
}
#======================================
# Process the hosts on the commandline
#======================================
n="0"
num_bad_hosts="0"
for host in "$@"; do
data="$(read_fixed_diskspace $host)"
if [ "$?" != "0" ]; then
bad_hosts[$num_bad_hosts]=$host
last_bad_host=$host
let num_bad_hosts+=1
message[$n]="$host: $data"
let n+=1
else
while read desc size used percent_free junk; do
if [[ ("$percent_free" != "") &&
($percent_free -lt $percent_free_threshold) ]]; then
if [ "$host" != "$last_bad_host" ]; then
bad_hosts[$num_bad_hosts]=$host
last_bad_host=$host
let num_bad_hosts+=1
fi
message[$n]="$host:$desc is $(( 100 - $percent_free ))% full - \
$(commaize $used)M used out of $(commaize $size)M total"
let n+=1
fi
done < <(echo -e "$data")
fi
done
if [ "$num_bad_hosts" -gt "0" ]; then
# summary line: all bad hosts
echo "${bad_hosts[*]}"
# messages
lastn=$(( $n-1 ))
for i in $(seq 0 $lastn); do
echo ${message[$i]}
done
exit 1;
fi
exit 0;