#!@@GOODSH@@ # -*- sh -*- : << =cut =head1 NAME samba - Plugin to monitor number of files held open by the CIFS clients =head1 CONFIGURATION This plugin uses the following configuration variables: [samba] user root env.smbstatus /usr/bin/smbstatus env.ignoreipcshare 1 Usually "smbstatus" requires to be run as root (see "user root" above). Environment variables: * smbstatus: path to "smbstatus" executable (default: search PATH and fall back to /usr/bin/smbstatus) * ignoreipcshare: set this variable to any non-empty value to ignore IPC$ when counting shares. =head1 AUTHOR Unknown author =head1 LICENSE GPLv2 =head1 MAGIC MARKERS #%# family=contrib #%# capabilities=autoconf =cut SMBSTATUS=${smbstatus:-$(command -v sudo smbstatus)} SMBSTATUS=${SMBSTATUS:-sudo /usr/bin/smbstatus} if [ "$1" = "autoconf" ]; then if [ -x "$SMBSTATUS" ]; then if "$SMBSTATUS" -V >/dev/null 2>&1; then echo 'yes' else echo "no (failed to run $SMBSTATUS - maybe need to run as 'root'?)" fi else echo 'no (smbstatus not found)' fi exit 0 fi if [ "$1" = "config" ]; then echo 'graph_title Samba status' echo 'graph_args -l 0' echo 'graph_vlabel number' echo 'graph_category samba' echo 'proc.label processes' echo 'lock.label locked files' echo 'share.label Open shares' # Bug pointed out by kozik: there is no max field. # echo 'max.warning 900' # echo 'max.critical 960' exit 0 fi $SMBSTATUS -p 2>/dev/null | awk 'BEGIN {lines=0} $1 ~ /^[0-9]+/ {lines++} END {print "proc.value " lines}' $SMBSTATUS -L 2>/dev/null | awk 'BEGIN {lines=0} $1 ~ /^[0-9]+/ {lines++} END {print "lock.value " lines}' if [ -n "${ignoreipcshare:-}" ]; then # shellcheck disable=SC2016 IGNORE='$1=="IPC$" {next}' fi $SMBSTATUS -S 2>/dev/null | awk ' BEGIN {lines=0;state=0} $1=="Service" && state==0 {state=1; next} /^--*$/ && state==1 {state=2; next} state < 2 {next} /^$/ {next} '"$IGNORE"' {lines++} END {print "share.value " lines}'