adding libre bits
This commit is contained in:
		
							
								
								
									
										114
									
								
								libre-work/librenms/distro
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										114
									
								
								libre-work/librenms/distro
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,114 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# Detects which OS and if it is Linux then it will detect which Linux Distribution.
 | 
			
		||||
 | 
			
		||||
OS=`uname -s`
 | 
			
		||||
REV=`uname -r`
 | 
			
		||||
MACH=`uname -m`
 | 
			
		||||
 | 
			
		||||
if [ "${OS}" = "SunOS" ] ; then
 | 
			
		||||
  OS=Solaris
 | 
			
		||||
  ARCH=`uname -p`
 | 
			
		||||
  OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
 | 
			
		||||
 | 
			
		||||
elif [ "${OS}" = "AIX" ] ; then
 | 
			
		||||
  OSSTR="${OS} `oslevel` (`oslevel -r`)"
 | 
			
		||||
 | 
			
		||||
elif [ "${OS}" = "Linux" ] ; then
 | 
			
		||||
  KERNEL=`uname -r`
 | 
			
		||||
 | 
			
		||||
  if [ -f /etc/fedora-release ]; then
 | 
			
		||||
    DIST=$(cat /etc/fedora-release | awk '{print $1}')
 | 
			
		||||
    REV=`cat /etc/fedora-release | sed s/.*release\ // | sed s/\ .*//`
 | 
			
		||||
        
 | 
			
		||||
  elif [ -f /etc/redhat-release ] ; then
 | 
			
		||||
    DIST=$(cat /etc/redhat-release | awk '{print $1}')
 | 
			
		||||
    if [ "${DIST}" = "CentOS" ]; then
 | 
			
		||||
      DIST="CentOS"
 | 
			
		||||
    elif [ "${DIST}" = "Mandriva" ]; then
 | 
			
		||||
      DIST="Mandriva"
 | 
			
		||||
      PSEUDONAME=`cat /etc/mandriva-release | sed s/.*\(// | sed s/\)//`
 | 
			
		||||
      REV=`cat /etc/mandriva-release | sed s/.*release\ // | sed s/\ .*//`
 | 
			
		||||
    elif [ -f /etc/oracle-release ]; then
 | 
			
		||||
      DIST="Oracle"
 | 
			
		||||
    else
 | 
			
		||||
      DIST="RedHat"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    PSEUDONAME=`cat /etc/redhat-release | sed s/.*\(// | sed s/\)//`
 | 
			
		||||
    REV=`cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//`
 | 
			
		||||
 | 
			
		||||
  elif [ -f /etc/mandrake-release ] ; then
 | 
			
		||||
    DIST='Mandrake'
 | 
			
		||||
    PSEUDONAME=`cat /etc/mandrake-release | sed s/.*\(// | sed s/\)//`
 | 
			
		||||
    REV=`cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//`
 | 
			
		||||
 | 
			
		||||
  elif [ -f /etc/devuan_version ] ; then
 | 
			
		||||
    DIST="Devuan `cat /etc/devuan_version`"
 | 
			
		||||
    REV=""
 | 
			
		||||
 | 
			
		||||
  elif [ -f /etc/debian_version ] ; then
 | 
			
		||||
    DIST="Debian `cat /etc/debian_version`"
 | 
			
		||||
    REV=""
 | 
			
		||||
    ID=`lsb_release -i | awk -F ':' '{print $2}' | sed 's/	//g'`
 | 
			
		||||
    if [ "${ID}" = "Raspbian" ] ; then
 | 
			
		||||
      DIST="Raspbian `cat /etc/debian_version`"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
  elif [ -f /etc/gentoo-release ] ; then
 | 
			
		||||
    DIST="Gentoo"
 | 
			
		||||
    REV=$(tr -d '[[:alpha:]]' </etc/gentoo-release | tr -d " ")
 | 
			
		||||
 | 
			
		||||
  elif [ -f /etc/arch-release ] ; then
 | 
			
		||||
    DIST="Arch Linux"
 | 
			
		||||
    REV="" # Omit version since Arch Linux uses rolling releases
 | 
			
		||||
    IGNORE_LSB=1 # /etc/lsb-release would overwrite $REV with "rolling"
 | 
			
		||||
 | 
			
		||||
  elif [ -f /etc/os-release ] ; then
 | 
			
		||||
    DIST=$(grep '^NAME=' /etc/os-release | cut -d= -f2- | tr -d '"')
 | 
			
		||||
    REV=$(grep '^VERSION_ID=' /etc/os-release | cut -d= -f2- | tr -d '"')
 | 
			
		||||
 | 
			
		||||
  elif [ -f /etc/openwrt_version ] ; then
 | 
			
		||||
    DIST="OpenWrt"
 | 
			
		||||
    REV=$(cat /etc/openwrt_version)
 | 
			
		||||
 | 
			
		||||
  elif [ -f /etc/pld-release ] ; then
 | 
			
		||||
    DIST=$(cat /etc/pld-release)
 | 
			
		||||
    REV=""
 | 
			
		||||
 | 
			
		||||
  elif [ -f /etc/SuSE-release ] ; then
 | 
			
		||||
    DIST=$(echo SLES $(grep VERSION /etc/SuSE-release | cut -d = -f 2 | tr -d " "))
 | 
			
		||||
    REV=$(echo SP$(grep PATCHLEVEL /etc/SuSE-release | cut -d = -f 2 | tr -d " "))
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ -f /etc/lsb-release -a "${IGNORE_LSB}" != 1 ] ; then
 | 
			
		||||
    LSB_DIST=$(lsb_release -si)
 | 
			
		||||
    LSB_REV=$(lsb_release -sr)
 | 
			
		||||
    if [ "$LSB_DIST" != "" ] ; then
 | 
			
		||||
      DIST=$LSB_DIST
 | 
			
		||||
    fi
 | 
			
		||||
    if [ "$LSB_REV" != "" ] ; then
 | 
			
		||||
      REV=$LSB_REV
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ "`uname -a | awk '{print $(NF)}'`" = "DD-WRT" ] ; then
 | 
			
		||||
    DIST="dd-wrt"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ -n "${REV}" ]
 | 
			
		||||
  then
 | 
			
		||||
    OSSTR="${DIST} ${REV}"
 | 
			
		||||
  else
 | 
			
		||||
    OSSTR="${DIST}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
elif [ "${OS}" = "Darwin" ] ; then
 | 
			
		||||
  if [ -f /usr/bin/sw_vers ] ; then
 | 
			
		||||
    OSSTR=`/usr/bin/sw_vers|grep -v Build|sed 's/^.*:.//'| tr "\n" ' '`
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
elif [ "${OS}" = "FreeBSD" ] ; then
 | 
			
		||||
  OSSTR=`/usr/bin/uname -mior`
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo ${OSSTR}
 | 
			
		||||
							
								
								
									
										25
									
								
								libre-work/librenms/ntp-client.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										25
									
								
								libre-work/librenms/ntp-client.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
################################################################
 | 
			
		||||
# copy this script to somewhere like /opt and make chmod +x it #
 | 
			
		||||
# edit your snmpd.conf and include                             #
 | 
			
		||||
# extend ntp-client /opt/ntp-client.sh                         #
 | 
			
		||||
# restart snmpd and activate the app for desired host          #
 | 
			
		||||
# please make sure you have the path/binaries below            #
 | 
			
		||||
################################################################
 | 
			
		||||
# Binaries and paths required                                  #
 | 
			
		||||
################################################################
 | 
			
		||||
BIN_NTPQ="$(command -v ntpq)"
 | 
			
		||||
BIN_GREP="$(command -v grep)"
 | 
			
		||||
BIN_TR="$(command -v tr)"
 | 
			
		||||
BIN_CUT="$(command -v cut)"
 | 
			
		||||
################################################################
 | 
			
		||||
# Don't change anything unless you know what are you doing     #
 | 
			
		||||
################################################################
 | 
			
		||||
CMD1=`$BIN_NTPQ -c rv | $BIN_GREP 'jitter' | $BIN_TR '\n' ' '`
 | 
			
		||||
IFS=', ' read -r -a array <<< "$CMD1"
 | 
			
		||||
 | 
			
		||||
for value in 2 3 4 5 6
 | 
			
		||||
do
 | 
			
		||||
	echo ${array["$value"]} | $BIN_CUT -d "=" -f 2
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										89
									
								
								libre-work/librenms/ntp-server.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										89
									
								
								libre-work/librenms/ntp-server.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,89 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
# Please make sure the paths below are correct.
 | 
			
		||||
# Alternatively you can put them in $0.conf, meaning if you've named
 | 
			
		||||
# this script ntp-client.sh then it must go in ntp-client.sh.conf .
 | 
			
		||||
#
 | 
			
		||||
# NTPQV output version of "ntpq -c rv" 
 | 
			
		||||
# p1 DD-WRT and some other outdated linux distros
 | 
			
		||||
# p11 FreeBSD 11 and any linux distro that is up to date
 | 
			
		||||
#
 | 
			
		||||
# If you are unsure, which to set, run this script and make sure that
 | 
			
		||||
# the JSON output variables match that in "ntpq -c rv".
 | 
			
		||||
#
 | 
			
		||||
BIN_NTPD='/usr/bin/env ntpd'
 | 
			
		||||
BIN_NTPQ='/usr/bin/env ntpq'
 | 
			
		||||
BIN_NTPDC='/usr/bin/env ntpdc'
 | 
			
		||||
BIN_GREP='/usr/bin/env grep'
 | 
			
		||||
BIN_TR='/usr/bin/env tr'
 | 
			
		||||
BIN_CUT='/usr/bin/env cut'
 | 
			
		||||
BIN_SED="/usr/bin/env sed"
 | 
			
		||||
BIN_AWK='/usr/bin/env awk'
 | 
			
		||||
NTPQV="p11"
 | 
			
		||||
################################################################
 | 
			
		||||
# Don't change anything unless you know what are you doing     #
 | 
			
		||||
################################################################
 | 
			
		||||
CONFIG=$0".conf"
 | 
			
		||||
if [ -f $CONFIG ]; then
 | 
			
		||||
    . $CONFIG
 | 
			
		||||
fi
 | 
			
		||||
VERSION=1
 | 
			
		||||
 | 
			
		||||
STRATUM=`$BIN_NTPQ -c rv | $BIN_GREP -Eow "stratum=[0-9]+" | $BIN_CUT -d "=" -f 2`
 | 
			
		||||
 | 
			
		||||
# parse the ntpq info that requires version specific info
 | 
			
		||||
NTPQ_RAW=`$BIN_NTPQ -c rv | $BIN_GREP jitter | $BIN_SED 's/[[:alpha:]=,_]/ /g'`
 | 
			
		||||
if [ $NTPQV = "p11" ]; then
 | 
			
		||||
	OFFSET=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $3}'`
 | 
			
		||||
	FREQUENCY=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $4}'`
 | 
			
		||||
	SYS_JITTER=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $5}'`
 | 
			
		||||
	CLK_JITTER=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $6}'`
 | 
			
		||||
	CLK_WANDER=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $7}'`
 | 
			
		||||
fi
 | 
			
		||||
if [ $NTPQV = "p1" ]; then
 | 
			
		||||
	OFFSET=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $2}'`
 | 
			
		||||
	FREQUENCY=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $3}'`
 | 
			
		||||
	SYS_JITTER=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $4}'`
 | 
			
		||||
	CLK_JITTER=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $5}'`
 | 
			
		||||
	CLK_WANDER=`echo $NTPQ_RAW | $BIN_AWK -F ' ' '{print $6}'`
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
VER=`$BIN_NTPD --version`
 | 
			
		||||
if [ "$VER" = '4.2.6p5' ]; then
 | 
			
		||||
  USECMD=`echo $BIN_NTPDC -c iostats`
 | 
			
		||||
else
 | 
			
		||||
  USECMD=`echo $BIN_NTPQ -c iostats localhost`
 | 
			
		||||
fi
 | 
			
		||||
CMD2=`$USECMD | $BIN_TR -d ' ' | $BIN_CUT -d : -f 2 | $BIN_TR '\n' ' '`
 | 
			
		||||
 | 
			
		||||
TIMESINCERESET=`echo $CMD2 | $BIN_AWK -F ' ' '{print $1}'`
 | 
			
		||||
RECEIVEDBUFFERS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $2}'`
 | 
			
		||||
FREERECEIVEBUFFERS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $3}'`
 | 
			
		||||
USEDRECEIVEBUFFERS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $4}'`
 | 
			
		||||
LOWWATERREFILLS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $5}'`
 | 
			
		||||
DROPPEDPACKETS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $6}'`
 | 
			
		||||
IGNOREDPACKETS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $7}'`
 | 
			
		||||
RECEIVEDPACKETS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $8}'`
 | 
			
		||||
PACKETSSENT=`echo $CMD2 | $BIN_AWK -F ' ' '{print $9}'`
 | 
			
		||||
PACKETSENDFAILURES=`echo $CMD2 | $BIN_AWK -F ' ' '{print $10}'`
 | 
			
		||||
INPUTWAKEUPS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $11}'`
 | 
			
		||||
USEFULINPUTWAKEUPS=`echo $CMD2 | $BIN_AWK -F ' ' '{print $12}'`
 | 
			
		||||
 | 
			
		||||
echo '{"data":{"offset":"'$OFFSET\
 | 
			
		||||
'","frequency":"'$FREQUENCY\
 | 
			
		||||
'","sys_jitter":"'$SYS_JITTER\
 | 
			
		||||
'","clk_jitter":"'$CLK_JITTER\
 | 
			
		||||
'","clk_wander":"'$CLK_WANDER\
 | 
			
		||||
'","stratum":"'$STRATUM\
 | 
			
		||||
'","time_since_reset":"'$TIMESINCERESET\
 | 
			
		||||
'","receive_buffers":"'$RECEIVEDBUFFERS\
 | 
			
		||||
'","free_receive_buffers":"'$FREERECEIVEBUFFERS\
 | 
			
		||||
'","used_receive_buffers":"'$USEDRECEIVEBUFFERS\
 | 
			
		||||
'","low_water_refills":"'$LOWWATERREFILLS\
 | 
			
		||||
'","dropped_packets":"'$DROPPEDPACKETS\
 | 
			
		||||
'","ignored_packets":"'$IGNOREDPACKETS\
 | 
			
		||||
'","received_packets":"'$RECEIVEDPACKETS\
 | 
			
		||||
'","packets_sent":"'$PACKETSSENT\
 | 
			
		||||
'","packet_send_failures":"'$PACKETSENDFAILURES\
 | 
			
		||||
'","input_wakeups":"'$PACKETSENDFAILURES\
 | 
			
		||||
'","useful_input_wakeups":"'$USEFULINPUTWAKEUPS\
 | 
			
		||||
'"},"error":"0","errorString":"","version":"'$VERSION'"}'
 | 
			
		||||
							
								
								
									
										73
									
								
								libre-work/librenms/os-updates.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										73
									
								
								libre-work/librenms/os-updates.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,73 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
################################################################
 | 
			
		||||
# copy this script to /etc/snmp/ and make it executable:       #
 | 
			
		||||
# chmod +x /etc/snmp/os-updates.sh                             #
 | 
			
		||||
# ------------------------------------------------------------ #
 | 
			
		||||
# edit your snmpd.conf and include:                            #
 | 
			
		||||
# extend osupdate /opt/os-updates.sh 			       #
 | 
			
		||||
#--------------------------------------------------------------#
 | 
			
		||||
# restart snmpd and activate the app for desired host          #
 | 
			
		||||
#--------------------------------------------------------------#
 | 
			
		||||
# please make sure you have the path/binaries below            #
 | 
			
		||||
################################################################ 
 | 
			
		||||
BIN_WC='/usr/bin/wc'
 | 
			
		||||
BIN_GREP='/bin/grep'
 | 
			
		||||
CMD_GREP='-c'
 | 
			
		||||
CMD_WC='-l'
 | 
			
		||||
BIN_ZYPPER='/usr/bin/zypper'
 | 
			
		||||
CMD_ZYPPER='-q lu'
 | 
			
		||||
BIN_YUM='/usr/bin/yum'
 | 
			
		||||
CMD_YUM='-q check-update'
 | 
			
		||||
BIN_DNF='/usr/bin/dnf'
 | 
			
		||||
CMD_DNF='-q check-update'
 | 
			
		||||
BIN_APT='/usr/bin/apt-get'
 | 
			
		||||
CMD_APT='-qq -s upgrade'
 | 
			
		||||
BIN_PACMAN='/usr/bin/pacman'
 | 
			
		||||
CMD_PACMAN='-Sup'
 | 
			
		||||
 | 
			
		||||
################################################################
 | 
			
		||||
# Don't change anything unless you know what are you doing     #
 | 
			
		||||
################################################################
 | 
			
		||||
if [ -f $BIN_ZYPPER ]; then
 | 
			
		||||
    # OpenSUSE
 | 
			
		||||
    UPDATES=`$BIN_ZYPPER $CMD_ZYPPER | $BIN_WC $CMD_WC`
 | 
			
		||||
    if [ $UPDATES -ge 2 ]; then
 | 
			
		||||
        echo $(($UPDATES-2));
 | 
			
		||||
    else
 | 
			
		||||
        echo "0";
 | 
			
		||||
    fi
 | 
			
		||||
elif [ -f $BIN_DNF ]; then
 | 
			
		||||
    # Fedora
 | 
			
		||||
    UPDATES=`$BIN_DNF $CMD_DNF | $BIN_WC $CMD_WC`
 | 
			
		||||
    if [ $UPDATES -ge 1 ]; then
 | 
			
		||||
        echo $(($UPDATES-1));
 | 
			
		||||
    else
 | 
			
		||||
        echo "0";
 | 
			
		||||
    fi
 | 
			
		||||
elif [ -f $BIN_PACMAN ]; then
 | 
			
		||||
    # Arch
 | 
			
		||||
    UPDATES=`$BIN_PACMAN $CMD_PACMAN | $BIN_WC $CMD_WC`
 | 
			
		||||
    if [ $UPDATES -ge 1 ]; then
 | 
			
		||||
        echo $(($UPDATES-1));
 | 
			
		||||
    else
 | 
			
		||||
        echo "0";
 | 
			
		||||
    fi
 | 
			
		||||
elif [ -f $BIN_YUM ]; then
 | 
			
		||||
    # CentOS / Redhat
 | 
			
		||||
    UPDATES=`$BIN_YUM $CMD_YUM | $BIN_WC $CMD_WC`
 | 
			
		||||
    if [ $UPDATES -ge 1 ]; then
 | 
			
		||||
        echo $(($UPDATES-1));
 | 
			
		||||
    else
 | 
			
		||||
        echo "0";
 | 
			
		||||
    fi
 | 
			
		||||
elif [ -f $BIN_APT ]; then
 | 
			
		||||
    # Debian / Devuan / Ubuntu
 | 
			
		||||
    UPDATES=`$BIN_APT $CMD_APT | $BIN_GREP $CMD_GREP 'Inst'`
 | 
			
		||||
    if [ $UPDATES -ge 1 ]; then
 | 
			
		||||
        echo $UPDATES;
 | 
			
		||||
    else
 | 
			
		||||
        echo "0";
 | 
			
		||||
    fi
 | 
			
		||||
else
 | 
			
		||||
    echo "0";
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										13
									
								
								libre-work/librenms/postfix-queues
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										13
									
								
								libre-work/librenms/postfix-queues
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
#Written by Valec 2006. Steal and share.
 | 
			
		||||
#Get postfix queue lengths
 | 
			
		||||
 | 
			
		||||
#extend mailq /opt/observer/scripts/getmailq.sh
 | 
			
		||||
 | 
			
		||||
QUEUES="incoming active deferred hold"
 | 
			
		||||
 | 
			
		||||
for i in $QUEUES; do
 | 
			
		||||
        COUNT=`qshape $i | grep TOTAL | awk '{print $2}'`
 | 
			
		||||
        printf "$COUNT\n"
 | 
			
		||||
done
 | 
			
		||||
							
								
								
									
										545
									
								
								libre-work/librenms/postfixdetailed
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										545
									
								
								libre-work/librenms/postfixdetailed
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,545 @@
 | 
			
		||||
#!/usr/bin/env perl
 | 
			
		||||
 | 
			
		||||
# add this to your snmpd.conf file as below
 | 
			
		||||
# extend postfixdetailed /etc/snmp/postfixdetailed
 | 
			
		||||
 | 
			
		||||
# The cache file to use.
 | 
			
		||||
my $cache='/var/cache/postfixdetailed';
 | 
			
		||||
 | 
			
		||||
# the location of pflogsumm
 | 
			
		||||
my $pflogsumm='/usr/bin/env pflogsumm';
 | 
			
		||||
 | 
			
		||||
#totals
 | 
			
		||||
#    847   received                 = received
 | 
			
		||||
#    852   delivered                = delivered
 | 
			
		||||
#      0   forwarded                = forwarded
 | 
			
		||||
#      3   deferred  (67  deferrals)= deferred
 | 
			
		||||
#      0   bounced                  = bounced
 | 
			
		||||
#    593   rejected (41%)           = rejected
 | 
			
		||||
#      0   reject warnings          = rejectw
 | 
			
		||||
#      0   held                     = held
 | 
			
		||||
#      0   discarded (0%)           = discarded
 | 
			
		||||
 | 
			
		||||
#  16899k  bytes received           = bytesr
 | 
			
		||||
#  18009k  bytes delivered          = bytesd
 | 
			
		||||
#    415   senders                  = senders
 | 
			
		||||
#    266   sending hosts/domains    = sendinghd
 | 
			
		||||
#     15   recipients               = recipients
 | 
			
		||||
#      9   recipient hosts/domains  = recipienthd
 | 
			
		||||
 | 
			
		||||
######message deferral detail
 | 
			
		||||
#Connection refused  = deferralcr
 | 
			
		||||
#Host is down  = deferralhid
 | 
			
		||||
 | 
			
		||||
########message reject detail
 | 
			
		||||
#Client host rejected                                     = chr
 | 
			
		||||
#Helo command rejected: need fully-qualified hostname     = hcrnfqh
 | 
			
		||||
#Sender address rejected: Domain not found                = sardnf
 | 
			
		||||
#Sender address rejected: not owned by user               = sarnobu
 | 
			
		||||
#blocked using                                            = bu
 | 
			
		||||
#Recipient address rejected: User unknown                 = raruu
 | 
			
		||||
#Helo command rejected: Invalid name                      = hcrin
 | 
			
		||||
#Sender address rejected: need fully-qualified address    = sarnfqa
 | 
			
		||||
#Recipient address rejected: Domain not found             = rardnf
 | 
			
		||||
#Recipient address rejected: need fully-qualified address = rarnfqa
 | 
			
		||||
#Improper use of SMTP command pipelining                  = iuscp
 | 
			
		||||
#Message size exceeds fixed limit                         = msefl
 | 
			
		||||
#Server configuration error                               = sce
 | 
			
		||||
#Server configuration problem                             = scp
 | 
			
		||||
#unknown reject reason                                    = urr
 | 
			
		||||
 | 
			
		||||
my $old='';
 | 
			
		||||
 | 
			
		||||
#reads in the old data if it exists
 | 
			
		||||
if ( -f $cache ){
 | 
			
		||||
	open(my $fh, "<", $cache) or die "Can't open '".$cache."'";
 | 
			
		||||
	# if this is over 2048, something is most likely wrong
 | 
			
		||||
	read($fh , $old , 2048);
 | 
			
		||||
	close($fh);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
my ( $received,
 | 
			
		||||
	 $delivered,
 | 
			
		||||
	 $forwarded,
 | 
			
		||||
	 $deferred,
 | 
			
		||||
	 $bounced,
 | 
			
		||||
	 $rejected,
 | 
			
		||||
	 $rejectw,
 | 
			
		||||
	 $held,
 | 
			
		||||
	 $discarded,
 | 
			
		||||
	 $bytesr,
 | 
			
		||||
	 $bytesd,
 | 
			
		||||
	 $senders,
 | 
			
		||||
	 $sendinghd,
 | 
			
		||||
	 $recipients,
 | 
			
		||||
	 $recipienthd,
 | 
			
		||||
	 $deferralcr,
 | 
			
		||||
	 $deferralhid,
 | 
			
		||||
	 $chr,
 | 
			
		||||
	 $hcrnfqh,
 | 
			
		||||
	 $sardnf,
 | 
			
		||||
	 $sarnobu,
 | 
			
		||||
	 $bu,
 | 
			
		||||
	 $raruu,
 | 
			
		||||
	 $hcrin,
 | 
			
		||||
	 $sarnfqa,
 | 
			
		||||
	 $rardnf,
 | 
			
		||||
	 $rarnfqa,
 | 
			
		||||
	 $iuscp,
 | 
			
		||||
	 $msefl,
 | 
			
		||||
	 $sce,
 | 
			
		||||
	 $scp,
 | 
			
		||||
	 $urr) = split ( /\n/, $old );
 | 
			
		||||
 | 
			
		||||
if ( ! defined( $received ) ){ $received=0; }
 | 
			
		||||
if ( ! defined( $delivered ) ){ $delivered=0; }
 | 
			
		||||
if ( ! defined( $forwarded ) ){ $forwarded=0; }
 | 
			
		||||
if ( ! defined( $deferred ) ){ $deferred=0; }
 | 
			
		||||
if ( ! defined( $bounced ) ){ $bounced=0; }
 | 
			
		||||
if ( ! defined( $rejected ) ){ $rejected=0; }
 | 
			
		||||
if ( ! defined( $rejectw ) ){ $rejectw=0; }
 | 
			
		||||
if ( ! defined( $held ) ){ $held=0; }
 | 
			
		||||
if ( ! defined( $discarded ) ){ $discarded=0; }
 | 
			
		||||
if ( ! defined( $bytesr ) ){ $bytesr=0; }
 | 
			
		||||
if ( ! defined( $bytesd ) ){ $bytesd=0; }
 | 
			
		||||
if ( ! defined( $senders ) ){ $senders=0; }
 | 
			
		||||
if ( ! defined( $sendinghd ) ){ $sendinghd=0; }
 | 
			
		||||
if ( ! defined( $recipients ) ){ $recipients=0; }
 | 
			
		||||
if ( ! defined( $recipienthd ) ){ $recipienthd=0; }
 | 
			
		||||
if ( ! defined( $deferralcr ) ){ $deferralcr=0; }
 | 
			
		||||
if ( ! defined( $deferralhid ) ){ $deferralhid=0; }
 | 
			
		||||
if ( ! defined( $chr ) ){ $chr=0; }
 | 
			
		||||
if ( ! defined( $hcrnfqh ) ){ $hcrnfqh=0; }
 | 
			
		||||
if ( ! defined( $sardnf ) ){ $sardnf=0; }
 | 
			
		||||
if ( ! defined( $sarnobu ) ){ $sarnobu=0; }
 | 
			
		||||
if ( ! defined( $bu ) ){ $bu=0; }
 | 
			
		||||
if ( ! defined( $raruu ) ){ $raruu=0; }
 | 
			
		||||
if ( ! defined( $hcrin ) ){ $hcrin=0; }
 | 
			
		||||
if ( ! defined( $sarnfqa ) ){ $sarnfqa=0; }
 | 
			
		||||
if ( ! defined( $rardnf ) ){ $rardnf=0; }
 | 
			
		||||
if ( ! defined( $rarnfqa ) ){ $rarnfqa=0; }
 | 
			
		||||
if ( ! defined( $iuscp ) ){ $iuscp=0; }
 | 
			
		||||
if ( ! defined( $msefl ) ){ $msefl=0; }
 | 
			
		||||
if ( ! defined( $sce ) ){ $sce=0; }
 | 
			
		||||
if ( ! defined( $scp ) ){ $scp=0; }
 | 
			
		||||
if ( ! defined( $urr ) ){ $urr=0; }
 | 
			
		||||
 | 
			
		||||
#init current variables
 | 
			
		||||
my $receivedC=0;
 | 
			
		||||
my $deliveredC=0;
 | 
			
		||||
my $forwardedC=0;
 | 
			
		||||
my $deferredC=0;
 | 
			
		||||
my $bouncedC=0;
 | 
			
		||||
my $rejectedC=0;
 | 
			
		||||
my $rejectwC=0;
 | 
			
		||||
my $heldC=0;
 | 
			
		||||
my $discardedC=0;
 | 
			
		||||
my $bytesrC=0;
 | 
			
		||||
my $bytesdC=0;
 | 
			
		||||
my $sendersC=0;
 | 
			
		||||
my $sendinghdC=0;
 | 
			
		||||
my $recipientsC=0;
 | 
			
		||||
my $recipienthdC=0;
 | 
			
		||||
my $deferralcrC=0;
 | 
			
		||||
my $deferralhidC=0;
 | 
			
		||||
my $chrC=0;
 | 
			
		||||
my $hcrnfqhC=0;
 | 
			
		||||
my $sardnfC=0;
 | 
			
		||||
my $sarnobuC=0;
 | 
			
		||||
my $buC=0;
 | 
			
		||||
my $raruuC=0;
 | 
			
		||||
my $hcrinC=0;
 | 
			
		||||
my $sarnfqaC=0;
 | 
			
		||||
my $rardnfC=0;
 | 
			
		||||
my $rarnfqaC=0;
 | 
			
		||||
my $iuscpC=0;
 | 
			
		||||
my $mseflC=0;
 | 
			
		||||
my $sceC=0;
 | 
			
		||||
my $scpC=0;
 | 
			
		||||
my $urrC=0;
 | 
			
		||||
 | 
			
		||||
sub newValue{
 | 
			
		||||
	my $old=$_[0];
 | 
			
		||||
	my $new=$_[1];
 | 
			
		||||
 | 
			
		||||
	#if new is undefined, just default to 0... this should never happen
 | 
			
		||||
	if ( !defined( $new ) ){
 | 
			
		||||
		warn('New not defined');
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#sets it to 0 if old is not defined
 | 
			
		||||
	if ( !defined( $old ) ){
 | 
			
		||||
		warn('Old not defined');
 | 
			
		||||
		$old=0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#make sure they are both numberic and if not set to zero
 | 
			
		||||
	if( $old !~ /^[0123456789]*$/ ){
 | 
			
		||||
		warn('Old not numeric');
 | 
			
		||||
		$old=0;
 | 
			
		||||
	}
 | 
			
		||||
	if( $new !~ /^[0123456789]*$/ ){
 | 
			
		||||
		warn('New not numeric');
 | 
			
		||||
		$new=0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#log rotation happened
 | 
			
		||||
	if ( $old > $new ){
 | 
			
		||||
		return $new;
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	return $new - $old;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
my $output=`$pflogsumm /var/log/mail.log`;
 | 
			
		||||
 | 
			
		||||
#holds client host rejected values till the end when it is compared to the old one
 | 
			
		||||
my $chrNew=0;
 | 
			
		||||
 | 
			
		||||
#holds RBL values till the end when it is compared to the old one
 | 
			
		||||
my $buNew=0;
 | 
			
		||||
 | 
			
		||||
# holds recipient address rejected values till the end when it is compared to the old one
 | 
			
		||||
my $raruuNew=0;
 | 
			
		||||
 | 
			
		||||
#holds the current values for checking later
 | 
			
		||||
my $current='';
 | 
			
		||||
 | 
			
		||||
my @outputA=split( /\n/, $output );
 | 
			
		||||
my $int=0;
 | 
			
		||||
while ( defined( $outputA[$int] ) ){
 | 
			
		||||
	my $line=$outputA[$int];
 | 
			
		||||
 | 
			
		||||
	$line=~s/^ *//;
 | 
			
		||||
	$line=~s/ +/ /g;
 | 
			
		||||
	$line=~s/\)$//;
 | 
			
		||||
 | 
			
		||||
	my $handled=0;
 | 
			
		||||
	
 | 
			
		||||
	#received line
 | 
			
		||||
	if ( ( $line =~ /[0123456789] received$/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/ .*//;
 | 
			
		||||
		$receivedC=$line;
 | 
			
		||||
		$received=newValue( $received, $line );
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#delivered line
 | 
			
		||||
	if ( ( $line =~ /[0123456789] delivered$/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/ .*//;
 | 
			
		||||
		$deliveredC=$line;
 | 
			
		||||
		$delivered=newValue( $delivered, $line );
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#forward line
 | 
			
		||||
	if ( ( $line =~ /[0123456789] forwarded$/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/ .*//;
 | 
			
		||||
		$forwardedC=$line;
 | 
			
		||||
		$forwarded=newValue( $forwarded, $line );
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#defereed line
 | 
			
		||||
	if ( ( $line =~ /[0123456789] deferred \(/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/ .*//;
 | 
			
		||||
		$deferredC=$line;
 | 
			
		||||
		$deferred=newValue( $deferred, $line );
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#bounced line
 | 
			
		||||
	if ( ( $line =~ /[0123456789] bounced$/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/ .*//;
 | 
			
		||||
		$bouncedC=$line;
 | 
			
		||||
		$bounced=newValue( $bounced, $line );
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#rejected line
 | 
			
		||||
	if ( ( $line =~ /[0123456789] rejected \(/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/ .*//;
 | 
			
		||||
		$rejectedC=$line;
 | 
			
		||||
		$rejected=newValue( $rejected, $line );
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#reject warning line
 | 
			
		||||
	if ( ( $line =~ /[0123456789] reject warnings/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/ .*//;
 | 
			
		||||
		$rejectwC=$line;
 | 
			
		||||
		$rejectw=newValue( $rejectw, $line );
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#held line
 | 
			
		||||
	if ( ( $line =~ /[0123456789] held$/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/ .*//;
 | 
			
		||||
		$heldC=$line;
 | 
			
		||||
		$held=newValue( $held, $line );
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#discarded line
 | 
			
		||||
	if ( ( $line =~ /[0123456789] discarded \(/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/ .*//;
 | 
			
		||||
		$discardedC=$line;
 | 
			
		||||
		$discarded=newValue( $discarded, $line );
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#bytes received line
 | 
			
		||||
	if ( ( $line =~ /[0123456789kM] bytes received$/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/ .*//;
 | 
			
		||||
		$line=~s/k/000/;
 | 
			
		||||
		$line=~s/M/000000/;
 | 
			
		||||
		$bytesrC=$line;
 | 
			
		||||
		$bytesr=newValue( $bytesr, $line );
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#bytes delivered line
 | 
			
		||||
	if ( ( $line =~ /[0123456789kM] bytes delivered$/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/ .*//;
 | 
			
		||||
		$line=~s/k/000/;
 | 
			
		||||
		$line=~s/M/000000/;
 | 
			
		||||
		$bytesdC=$line;
 | 
			
		||||
		$bytesd=newValue( $bytesd, $line );
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#senders line
 | 
			
		||||
	if ( ( $line =~ /[0123456789] senders$/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/ .*//;
 | 
			
		||||
		$sendersC=$line;
 | 
			
		||||
		$senders=newValue( $senders, $line );
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#sendering hosts/domains line
 | 
			
		||||
	if ( ( $line =~ /[0123456789] sending hosts\/domains$/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/ .*//;
 | 
			
		||||
		$sendinghdC=$line;
 | 
			
		||||
		$sendinghd=newValue( $sendinghd, $line );
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#recipients line
 | 
			
		||||
	if ( ( $line =~ /[0123456789] recipients$/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/ .*//;
 | 
			
		||||
		$recipientsC=$line;
 | 
			
		||||
		$recipients=newValue( $recipients, $line );
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#recipients line
 | 
			
		||||
	if ( ( $line =~ /[0123456789] recipient hosts\/domains$/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/ .*//;
 | 
			
		||||
		$recipienthdC=$line;
 | 
			
		||||
		$recipienthd=newValue( $recipienthd, $line );
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	# deferrals connectios refused
 | 
			
		||||
	if ( ( $line =~ /[0123456789] 25\: Connection refused$/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/ .*//;
 | 
			
		||||
		$deferralcrC=$line;
 | 
			
		||||
		$deferralcr=newValue( $deferralcr, $line );
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	# deferrals Host is down
 | 
			
		||||
	if ( ( $line =~ /Host is down$/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/ .*//;
 | 
			
		||||
		$deferralhidC=$line;
 | 
			
		||||
		$deferralhid=newValue( $deferralhid, $line );
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	# Client host rejected
 | 
			
		||||
	if ( ( $line =~ /Client host rejected/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/.*\: //g;
 | 
			
		||||
		$chrNew=$chrNew + $line;
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	#Helo command rejected: need fully-qualified hostname
 | 
			
		||||
	if ( ( $line =~ /Helo command rejected\: need fully\-qualified hostname/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/.*\: //g;
 | 
			
		||||
		$hcrnfqhC=$line;
 | 
			
		||||
		$hcrnfqh=newValue( $hcrnfqh, $line );
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#Sender address rejected: Domain not found
 | 
			
		||||
	if ( ( $line =~ /Sender address rejected\: Domain not found/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/.*\: //g;
 | 
			
		||||
		$sardnfC=$line;
 | 
			
		||||
		$sardnf=newValue( $sardnf, $line );
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#Sender address rejected: not owned by user
 | 
			
		||||
	if ( ( $line =~ /Sender address rejected\: not owned by user/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/.*\: //g;
 | 
			
		||||
		$sarnobuC=$line;
 | 
			
		||||
		$sarnobu=newValue( $sarnobu, $line );
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#blocked using
 | 
			
		||||
	# These lines are RBLs so there will be more than one.
 | 
			
		||||
	# Use $buNew to add them all up.
 | 
			
		||||
	if ( ( $line =~ /blocked using/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/.*\: //g;
 | 
			
		||||
		$buNew=$buNew + $line;
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#Recipient address rejected: User unknown
 | 
			
		||||
	if ( ( $line =~ /Recipient address rejected\: User unknown/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/.*\: //g;
 | 
			
		||||
		$raruuNew=$raruuNew + $line;
 | 
			
		||||
		$handled=1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#Helo command rejected: Invalid name
 | 
			
		||||
	if ( ( $line =~ /Helo command rejected\: Invalid name/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/.*\: //g;
 | 
			
		||||
		$hcrinC=$line;
 | 
			
		||||
		$hcrin=newValue( $hcrin, $line );
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	#Sender address rejected: need fully-qualified address
 | 
			
		||||
	if ( ( $line =~ /Sender address rejected\: need fully-qualified address/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/.*\: //g;
 | 
			
		||||
		$sarnfqaC=$line;
 | 
			
		||||
		$sarnfqa=newValue( $sarnfqa, $line );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#Recipient address rejected: Domain not found
 | 
			
		||||
	if ( ( $line =~ /Recipient address rejected\: Domain not found/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/.*\: //g;
 | 
			
		||||
		$rardnfC=$line;
 | 
			
		||||
		$rardnf=newValue( $rardnf, $line );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#Improper use of SMTP command pipelining
 | 
			
		||||
	if ( ( $line =~ /Improper use of SMTP command pipelining/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/.*\: //g;
 | 
			
		||||
		$iuoscpC=$line;
 | 
			
		||||
		$iuoscp=newValue( $iuoscp, $line );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#Message size exceeds fixed limit
 | 
			
		||||
	if ( ( $line =~ /Message size exceeds fixed limit/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/.*\: //g;
 | 
			
		||||
		$mseflC=$line;
 | 
			
		||||
		$msefl=newValue( $msefl, $line );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#Server configuration error
 | 
			
		||||
	if ( ( $line =~ /Server configuration error/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/.*\: //g;
 | 
			
		||||
		$sceC=$line;
 | 
			
		||||
		$sce=newValue( $sce, $line );
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#Server configuration problem
 | 
			
		||||
	if ( ( $line =~ /Server configuration problem/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/.*\: //g;
 | 
			
		||||
		$scpC=$line;
 | 
			
		||||
		$scp=newValue( $scp, $line );
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	#unknown reject reason
 | 
			
		||||
	if ( ( $line =~ /unknown reject reason/ ) && ( ! $handled ) ){
 | 
			
		||||
		$line=~s/.*\: //g;
 | 
			
		||||
		$urrC=$line;
 | 
			
		||||
		$urr=newValue( $urr, $line );
 | 
			
		||||
	}
 | 
			
		||||
	$int++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# final client host rejected total
 | 
			
		||||
$chr=newValue( $chr, $chrNew );
 | 
			
		||||
 | 
			
		||||
# final RBL total
 | 
			
		||||
$bu=newValue( $bu, $buNew );
 | 
			
		||||
 | 
			
		||||
# final recipient address rejected total
 | 
			
		||||
$raruu=newValue( $raruu, $raruuNew );
 | 
			
		||||
 | 
			
		||||
my $data=$received."\n".
 | 
			
		||||
	$delivered."\n".
 | 
			
		||||
	$forwarded."\n".
 | 
			
		||||
	$deferred."\n".
 | 
			
		||||
	$bounced."\n".
 | 
			
		||||
	$rejected."\n".
 | 
			
		||||
	$rejectw."\n".
 | 
			
		||||
	$held."\n".
 | 
			
		||||
	$discarded."\n".
 | 
			
		||||
	$bytesr."\n".
 | 
			
		||||
	$bytesd."\n".
 | 
			
		||||
	$senders."\n".
 | 
			
		||||
	$sendinghd."\n".
 | 
			
		||||
	$recipients."\n".
 | 
			
		||||
	$recipienthd."\n".
 | 
			
		||||
	$deferralcr."\n".
 | 
			
		||||
	$deferralhid."\n".
 | 
			
		||||
	$chr."\n".
 | 
			
		||||
	$hcrnfqh."\n".
 | 
			
		||||
	$sardnf."\n".
 | 
			
		||||
	$sarnobu."\n".
 | 
			
		||||
	$bu."\n".
 | 
			
		||||
	$raruu."\n".
 | 
			
		||||
	$hcrin."\n".
 | 
			
		||||
	$sarnfqa."\n".
 | 
			
		||||
	$rardnf."\n".
 | 
			
		||||
	$rarnfqa."\n".
 | 
			
		||||
	$iuscp."\n".
 | 
			
		||||
	$sce."\n".
 | 
			
		||||
	$scp."\n".
 | 
			
		||||
	$urr."\n";
 | 
			
		||||
	$msefl."\n".
 | 
			
		||||
 | 
			
		||||
print $data;
 | 
			
		||||
 | 
			
		||||
my $current=$receivedC."\n".
 | 
			
		||||
	$deliveredC."\n".
 | 
			
		||||
	$forwardedC."\n".
 | 
			
		||||
	$deferredC."\n".
 | 
			
		||||
	$bouncedC."\n".
 | 
			
		||||
	$rejectedC."\n".
 | 
			
		||||
	$rejectwC."\n".
 | 
			
		||||
	$heldC."\n".
 | 
			
		||||
	$discardedC."\n".
 | 
			
		||||
	$bytesrC."\n".
 | 
			
		||||
	$bytesdC."\n".
 | 
			
		||||
	$sendersC."\n".
 | 
			
		||||
	$sendinghdC."\n".
 | 
			
		||||
	$recipientsC."\n".
 | 
			
		||||
	$recipienthdC."\n".
 | 
			
		||||
	$deferralcrC."\n".
 | 
			
		||||
	$deferralhidC."\n".
 | 
			
		||||
	$chrNew."\n".
 | 
			
		||||
	$hcrnfqhC."\n".
 | 
			
		||||
	$sardnfC."\n".
 | 
			
		||||
	$sarnobuC."\n".
 | 
			
		||||
	$buNew."\n".
 | 
			
		||||
	$raruuNew."\n".
 | 
			
		||||
	$hcrinC."\n".
 | 
			
		||||
	$sarnfqaC."\n".
 | 
			
		||||
	$rardnfC."\n".
 | 
			
		||||
	$rarnfqaC."\n".
 | 
			
		||||
	$iuscpC."\n".
 | 
			
		||||
	$mseflC."\n".
 | 
			
		||||
	$sceC."\n".
 | 
			
		||||
	$scpC."\n".
 | 
			
		||||
	$urrC."\n";
 | 
			
		||||
 | 
			
		||||
open(my $fh, ">", $cache) or die "Can't open '".$cache."'";
 | 
			
		||||
print $fh $current;
 | 
			
		||||
close($fh);
 | 
			
		||||
							
								
								
									
										363
									
								
								libre-work/librenms/smart
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										363
									
								
								libre-work/librenms/smart
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,363 @@
 | 
			
		||||
#!/usr/bin/env perl
 | 
			
		||||
#Copyright (c) 2017, Zane C. Bowers-Hadley
 | 
			
		||||
#All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
#Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
#are permitted provided that the following conditions are met:
 | 
			
		||||
#
 | 
			
		||||
#   * Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
#    this list of conditions and the following disclaimer.
 | 
			
		||||
#   * Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
#    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
#    and/or other materials provided with the distribution.
 | 
			
		||||
#
 | 
			
		||||
#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | 
			
		||||
#ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
 | 
			
		||||
#WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 | 
			
		||||
#IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 | 
			
		||||
#INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
 | 
			
		||||
#BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
 | 
			
		||||
#DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | 
			
		||||
#LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 | 
			
		||||
#OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 | 
			
		||||
#THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
=for comment
 | 
			
		||||
 | 
			
		||||
Add this to snmpd.conf like below.
 | 
			
		||||
 | 
			
		||||
    extend smart /etc/snmp/smart
 | 
			
		||||
 | 
			
		||||
Then add to root's cron tab, if you have more than a few disks.
 | 
			
		||||
 | 
			
		||||
    */3 * * * * /etc/snmp/smart -u
 | 
			
		||||
 | 
			
		||||
You will also need to create the config file, which defaults to the same path as the script,
 | 
			
		||||
but with .config appended. So if the script is located at /etc/snmp/smart, the config file
 | 
			
		||||
will be /etc/snmp/smart.config. Alternatively you can also specific a config via -c.
 | 
			
		||||
 | 
			
		||||
Anything starting with a # is comment. The format for variables is $variable=$value. Empty
 | 
			
		||||
lines are ignored. Spaces and tabes at either the start or end of a line are ignored. Any
 | 
			
		||||
line with out a = or # are treated as a disk.
 | 
			
		||||
 | 
			
		||||
    #This is a comment
 | 
			
		||||
    cache=/var/cache/smart
 | 
			
		||||
    smartctl=/usr/local/sbin/smartctl
 | 
			
		||||
    useSN=0
 | 
			
		||||
    ada0
 | 
			
		||||
    ada1
 | 
			
		||||
 | 
			
		||||
The variables are as below.
 | 
			
		||||
 | 
			
		||||
    cache = The path to the cache file to use. Default: /var/cache/smart
 | 
			
		||||
    smartctl = The path to use for smartctl. Default: /usr/bin/env smartctl
 | 
			
		||||
    useSN = If set to 1, it will use the disks SN for reporting instead of the device name.
 | 
			
		||||
            1 is the default. 0 will use the device name.
 | 
			
		||||
 | 
			
		||||
If you want to guess at the configuration, call it with -g and it will print out what it thinks
 | 
			
		||||
it should be.    
 | 
			
		||||
 | 
			
		||||
=cut
 | 
			
		||||
 | 
			
		||||
##
 | 
			
		||||
## You should not need to touch anything below here.
 | 
			
		||||
##
 | 
			
		||||
use warnings;
 | 
			
		||||
use strict;
 | 
			
		||||
use Getopt::Std;
 | 
			
		||||
 | 
			
		||||
my $cache='/var/cache/smart';
 | 
			
		||||
my $smartctl='/usr/bin/env smartctl';
 | 
			
		||||
my @disks;
 | 
			
		||||
my $useSN=1;
 | 
			
		||||
 | 
			
		||||
$Getopt::Std::STANDARD_HELP_VERSION = 1;
 | 
			
		||||
sub main::VERSION_MESSAGE {
 | 
			
		||||
        print "SMART SNMP extend 0.0.0\n";
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
sub main::HELP_MESSAGE {
 | 
			
		||||
	print "\n".
 | 
			
		||||
		"-u   Update '".$cache."'\n".
 | 
			
		||||
		"-g   Guess at the config and print it to STDOUT.\n".
 | 
			
		||||
		"-c <config>   The config file to use.\n";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#gets the options
 | 
			
		||||
my %opts=();
 | 
			
		||||
getopts('ugc:', \%opts);
 | 
			
		||||
 | 
			
		||||
# guess if asked
 | 
			
		||||
if ( defined( $opts{g} ) ){
 | 
			
		||||
 | 
			
		||||
	#get what path to use for smartctl
 | 
			
		||||
	$smartctl=`which smartctl`;
 | 
			
		||||
	chomp($smartctl);
 | 
			
		||||
	if ( $? != 0 ){
 | 
			
		||||
		warn("'which smartctl' failed with a exit code of $?");
 | 
			
		||||
		exit 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#try to touch the default cache location and warn if it can't be done
 | 
			
		||||
	system('touch '.$cache.'>/dev/null');
 | 
			
		||||
	if ( $? != 0 ){
 | 
			
		||||
		$cache='#Could not touch '.$cache. "You will need to manually set it\n".
 | 
			
		||||
			"cache=?\n";
 | 
			
		||||
	}else{
 | 
			
		||||
		$cache='cache='.$cache."\n";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	my %found_disks;
 | 
			
		||||
	
 | 
			
		||||
	#check for drives named /dev/sd*
 | 
			
		||||
	my @matches=glob('/dev/sd*');
 | 
			
		||||
	@matches=grep(!/[0-9]/, @matches);
 | 
			
		||||
	my $matches_int=0;
 | 
			
		||||
	while ( defined( $matches[$matches_int] ) ){
 | 
			
		||||
		my $device=$matches[$matches_int];
 | 
			
		||||
		system( $smartctl.' -A '.$device.' > /dev/null' );
 | 
			
		||||
		if ( $? == 0 ){
 | 
			
		||||
			$device =~ s/\/dev\///;
 | 
			
		||||
			$found_disks{$device}=1;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		$matches_int++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#check for drives named /dev/ada*
 | 
			
		||||
	@matches=glob('/dev/ada*');
 | 
			
		||||
	@matches=grep(!/[ps]/, @matches);
 | 
			
		||||
	$matches_int=0;
 | 
			
		||||
	while ( defined( $matches[$matches_int] ) ){
 | 
			
		||||
		my $device=$matches[$matches_int];
 | 
			
		||||
		system( $smartctl.' -A '.$device.' > /dev/null' );
 | 
			
		||||
		if ( $? == 0 ){
 | 
			
		||||
			$device =~ s/\/dev\///;
 | 
			
		||||
			$found_disks{$device}=1;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		$matches_int++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#check for drives named /dev/da*
 | 
			
		||||
	@matches=glob('/dev/da*');
 | 
			
		||||
	@matches=grep(!/[ps]/, @matches);
 | 
			
		||||
	$matches_int=0;
 | 
			
		||||
	while ( defined( $matches[$matches_int] ) ){
 | 
			
		||||
		my $device=$matches[$matches_int];
 | 
			
		||||
		system( $smartctl.' -A '.$device.' > /dev/null' );
 | 
			
		||||
		if ( $? == 0 ){
 | 
			
		||||
			$device =~ s/\/dev\///;
 | 
			
		||||
			$found_disks{$device}=1;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		$matches_int++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#have smartctl scan and see if it finds anythings not get found
 | 
			
		||||
	my $scan_output=`$smartctl --scan-open`;
 | 
			
		||||
	my @scan_outputA=split(/\n/, $scan_output);
 | 
			
		||||
	@scan_outputA=grep(!/ses[0-9]/, @scan_outputA);  # not a disk, but may or may not have SMART attributes
 | 
			
		||||
	@scan_outputA=grep(!/pass[0-9]/, @scan_outputA); # very likely a duplicate and a disk under another name
 | 
			
		||||
	$matches_int=0;
 | 
			
		||||
	while ( defined( $scan_outputA[$matches_int] ) ){
 | 
			
		||||
		my $device=$scan_outputA[$matches_int];
 | 
			
		||||
		$device =~ s/ .*//;
 | 
			
		||||
		system( $smartctl.' -A '.$device.' > /dev/null' );
 | 
			
		||||
		if ( $? == 0 ){
 | 
			
		||||
			$device =~ s/\/dev\///;
 | 
			
		||||
			$found_disks{$device}=1;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		$matches_int++;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	print "useSN=0\n".'smartctl='.$smartctl."\n".
 | 
			
		||||
		$cache.
 | 
			
		||||
		join( "\n", keys(%found_disks) )."\n";
 | 
			
		||||
	
 | 
			
		||||
	exit 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#get which config file to use
 | 
			
		||||
my $config=$0.'.config';
 | 
			
		||||
if ( defined( $opts{c} ) ){
 | 
			
		||||
	$config=$opts{c};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#reads the config file, optionally
 | 
			
		||||
my $config_file='';
 | 
			
		||||
open(my $readfh, "<", $config) or die "Can't open '".$config."'";
 | 
			
		||||
read($readfh , $config_file , 1000000);
 | 
			
		||||
close($readfh);
 | 
			
		||||
 | 
			
		||||
#parse the config file and remove comments and empty lines
 | 
			
		||||
my @configA=split(/\n/, $config_file);
 | 
			
		||||
@configA=grep(!/^$/, @configA);
 | 
			
		||||
@configA=grep(!/^\#/, @configA);
 | 
			
		||||
@configA=grep(!/^[\s\t]*$/, @configA);
 | 
			
		||||
my $configA_int=0;
 | 
			
		||||
while ( defined( $configA[$configA_int] ) ){
 | 
			
		||||
	my $line=$configA[$configA_int];
 | 
			
		||||
	$line=~s/^[\t\s]+//;
 | 
			
		||||
	$line=~s/[\t\s]+$//;
 | 
			
		||||
 | 
			
		||||
	my ( $var, $val )=split(/=/, $line, 2);
 | 
			
		||||
 | 
			
		||||
	if ( $var eq 'cache' ){
 | 
			
		||||
		$cache=$val;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if ( $var eq 'smartctl' ){
 | 
			
		||||
		$smartctl=$val;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ( $var eq 'useSN' ){
 | 
			
		||||
		$useSN=$val;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if ( !defined( $val ) ){
 | 
			
		||||
		push(@disks, $var);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	$configA_int++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if set to 1, no cache will be written and it will be printed instead
 | 
			
		||||
my $noWrite=0;
 | 
			
		||||
 | 
			
		||||
# if no -u, it means we are being called from snmped
 | 
			
		||||
if ( ! defined( $opts{u} ) ){
 | 
			
		||||
	# if the cache file exists, print it, otherwise assume one is not being used
 | 
			
		||||
	if ( -f $cache ){
 | 
			
		||||
		my $old='';
 | 
			
		||||
		open(my $readfh, "<", $cache) or die "Can't open '".$cache."'";
 | 
			
		||||
		read($readfh , $old , 1000000);
 | 
			
		||||
		close($readfh);
 | 
			
		||||
		print $old;
 | 
			
		||||
		exit 0;
 | 
			
		||||
	}else{
 | 
			
		||||
		$opts{u}=1;
 | 
			
		||||
		$noWrite=1;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
my $toReturn='';
 | 
			
		||||
my $int=0;
 | 
			
		||||
while ( defined($disks[$int]) ) {
 | 
			
		||||
	my $disk=$disks[$int];
 | 
			
		||||
	my $disk_sn=$disk;
 | 
			
		||||
	my $output=`$smartctl -A /dev/$disk`;
 | 
			
		||||
 | 
			
		||||
	my %IDs=( '5'=>'null',
 | 
			
		||||
			  '10'=>'null',
 | 
			
		||||
			  '173'=>'null',
 | 
			
		||||
			  '177'=>'null',
 | 
			
		||||
			  '183'=>'null',
 | 
			
		||||
			  '184'=>'null',
 | 
			
		||||
			  '187'=>'null',
 | 
			
		||||
			  '188'=>'null',
 | 
			
		||||
			  '190'=>'null',
 | 
			
		||||
			  '194'=>'null',
 | 
			
		||||
			  '196'=>'null',
 | 
			
		||||
			  '197'=>'null',
 | 
			
		||||
			  '198'=>'null',
 | 
			
		||||
			  '199'=>'null',
 | 
			
		||||
			  '231'=>'null',
 | 
			
		||||
			  '233'=>'null',
 | 
			
		||||
	);
 | 
			
		||||
    
 | 
			
		||||
    my @outputA=split( /\n/, $output );
 | 
			
		||||
	my $outputAint=0;
 | 
			
		||||
	while ( defined($outputA[$outputAint]) ) {
 | 
			
		||||
		my $line=$outputA[$outputAint];
 | 
			
		||||
		$line=~s/^ +//;
 | 
			
		||||
		$line=~s/  +/ /g;
 | 
			
		||||
 | 
			
		||||
		if ( $line =~ /^[0123456789]+ / ) {
 | 
			
		||||
			my @lineA=split(/\ /, $line, 10);
 | 
			
		||||
			my $raw=$lineA[9];
 | 
			
		||||
			my $id=$lineA[0];
 | 
			
		||||
 | 
			
		||||
			# single int raw values
 | 
			
		||||
			if ( 
 | 
			
		||||
				( $id == 5 ) ||
 | 
			
		||||
				( $id == 10 ) ||
 | 
			
		||||
				( $id == 173 ) ||
 | 
			
		||||
				( $id == 177 ) ||
 | 
			
		||||
				( $id == 183 ) ||
 | 
			
		||||
				( $id == 184 ) ||
 | 
			
		||||
				( $id == 187 ) ||
 | 
			
		||||
				( $id == 196 ) ||
 | 
			
		||||
				( $id == 197 ) ||
 | 
			
		||||
				( $id == 198 ) ||
 | 
			
		||||
				( $id == 199 ) ||
 | 
			
		||||
				( $id == 231 ) ||
 | 
			
		||||
				( $id == 233 )
 | 
			
		||||
				) {
 | 
			
		||||
				$IDs{$id}=$raw;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			# 188, Command_Timeout
 | 
			
		||||
			if ( $id == 188 ) {
 | 
			
		||||
				my $total=0;
 | 
			
		||||
				my @rawA=split( /\ /, $raw );
 | 
			
		||||
				my $rawAint=0;
 | 
			
		||||
				while ( defined( $rawA[$rawAint] ) ) {
 | 
			
		||||
					$total=$total+$rawA[$rawAint];
 | 
			
		||||
					$rawAint++;
 | 
			
		||||
				}
 | 
			
		||||
				$IDs{$id}=$total;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			# 190, airflow temp
 | 
			
		||||
			# 194, temp
 | 
			
		||||
			if ( 
 | 
			
		||||
				( $id == 190 ) ||
 | 
			
		||||
				( $id == 194 )
 | 
			
		||||
				) {
 | 
			
		||||
				my ( $temp )=split(/\ /, $raw);
 | 
			
		||||
				$IDs{$id}=$temp;
 | 
			
		||||
			}			
 | 
			
		||||
			
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$outputAint++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#get the selftest logs
 | 
			
		||||
	$output=`$smartctl -l selftest /dev/$disk`;
 | 
			
		||||
	@outputA=split( /\n/, $output );
 | 
			
		||||
	my $completed=scalar grep(/Completed without error/, @outputA);
 | 
			
		||||
	my $interrupted=scalar grep(/Interrupted/, @outputA);
 | 
			
		||||
	my $read_failure=scalar grep(/read failure/, @outputA);
 | 
			
		||||
	my $unknown_failure=scalar grep(/unknown failure/, @outputA);
 | 
			
		||||
	my $extended=scalar grep(/Extended/, @outputA);
 | 
			
		||||
	my $short=scalar grep(/Short/, @outputA);
 | 
			
		||||
	my $conveyance=scalar grep(/Conveyance/, @outputA);
 | 
			
		||||
	my $selective=scalar grep(/Selective/, @outputA);
 | 
			
		||||
	
 | 
			
		||||
	# get the drive serial number, if needed
 | 
			
		||||
	my $disk_id=$disk;
 | 
			
		||||
	if ( $useSN ){
 | 
			
		||||
		while (`$smartctl -i /dev/$disk` =~ /Serial Number:(.*)/g) {
 | 
			
		||||
			$disk_id = $1;
 | 
			
		||||
			$disk_id =~ s/^\s+|\s+$//g;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	$toReturn=$toReturn.$disk_id.','.$IDs{'5'}.','.$IDs{'10'}.','.$IDs{'173'}.','.$IDs{'177'}.','.$IDs{'183'}.','.$IDs{'184'}.','.$IDs{'187'}.','.$IDs{'188'}
 | 
			
		||||
	    .','.$IDs{'190'} .','.$IDs{'194'}.','.$IDs{'196'}.','.$IDs{'197'}.','.$IDs{'198'}.','.$IDs{'199'}.','.$IDs{'231'}.','.$IDs{'233'}.','.
 | 
			
		||||
		$completed.','.$interrupted.','.$read_failure.','.$unknown_failure.','.$extended.','.$short.','.$conveyance.','.$selective."\n";
 | 
			
		||||
 | 
			
		||||
    $int++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if ( ! $noWrite ){
 | 
			
		||||
	open(my $writefh, ">", $cache) or die "Can't open '".$cache."'";
 | 
			
		||||
	print $writefh $toReturn;
 | 
			
		||||
	close($writefh);
 | 
			
		||||
}else{
 | 
			
		||||
	print $toReturn;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										3
									
								
								libre-work/librenms/smart.config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								libre-work/librenms/smart.config
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
smartctl=/usr/sbin/smartctl
 | 
			
		||||
cache=/var/cache/smart
 | 
			
		||||
sda
 | 
			
		||||
							
								
								
									
										32
									
								
								libre-work/librenms/snmpd.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								libre-work/librenms/snmpd.conf
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
##########################################################################
 | 
			
		||||
# snmpd.conf
 | 
			
		||||
# Created by CNW on 11/3/2018 via snmpconf wizard and manual post tweaks
 | 
			
		||||
###########################################################################
 | 
			
		||||
# SECTION: Monitor Various Aspects of the Running Host
 | 
			
		||||
#
 | 
			
		||||
#   The following check up on various aspects of a host.
 | 
			
		||||
 | 
			
		||||
# disk: Check for disk space usage of a partition.
 | 
			
		||||
#   The agent can check the amount of available disk space, and make
 | 
			
		||||
#   sure it is above a set limit.  
 | 
			
		||||
#   
 | 
			
		||||
load  3 3 3
 | 
			
		||||
rocommunity  kn3lmgmt 10.253.3.99
 | 
			
		||||
syslocation PFV
 | 
			
		||||
syscontact  prodtechopsalerts@turnsys.com
 | 
			
		||||
sysservices 76
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#TSYS tweaks
 | 
			
		||||
#Temperature
 | 
			
		||||
#pass_persist    .1.3.6.1.4.1.9.9.13.1.3 /usr/local/bin/temper-snmp
 | 
			
		||||
#Smart
 | 
			
		||||
extend smart /usr/local/librenms/smart
 | 
			
		||||
#NTP
 | 
			
		||||
extend ntp-client /usr/local/librenms/ntp-client.sh
 | 
			
		||||
#SMTP
 | 
			
		||||
extend mailq /usr/local/librenms/postfix-queues
 | 
			
		||||
#Distro Detection
 | 
			
		||||
extend .1.3.6.1.4.1.2021.7890.1 distro /usr/local/librenms/distro
 | 
			
		||||
#extend zfs /usr/local/bin/zfs
 | 
			
		||||
extend osupdate /usr/local/librenms/os-updates.sh
 | 
			
		||||
		Reference in New Issue
	
	Block a user