From 53d9a174f4f05c94c0fe392a83deb310095310b1 Mon Sep 17 00:00:00 2001
From: Britney Fransen <brfransen@gmail.com>
Date: Fri, 20 Feb 2015 20:11:18 +0000
Subject: xymon: add smart monitor

hobbit-myth-orphan.sh: add some help text
---
 abs/core/xymon/PKGBUILD               | 23 ++++++++-----
 abs/core/xymon/clientlaunch.cfg.patch | 18 ++++++----
 abs/core/xymon/hobbit-myth-orphan.sh  | 36 +++++++------------
 abs/core/xymon/tasks.d.mv             |  8 ++++-
 abs/core/xymon/xymon-client.rules     |  3 ++
 abs/core/xymon/xymon-server.rules     |  1 +
 abs/core/xymon/xymon-smart.sh         | 65 +++++++++++++++++++++++++++++++++++
 abs/core/xymon/xymonserver.cfg.diff   |  2 +-
 8 files changed, 116 insertions(+), 40 deletions(-)
 create mode 100644 abs/core/xymon/xymon-client.rules
 create mode 100755 abs/core/xymon/xymon-smart.sh

diff --git a/abs/core/xymon/PKGBUILD b/abs/core/xymon/PKGBUILD
index e8908cc..f171831 100755
--- a/abs/core/xymon/PKGBUILD
+++ b/abs/core/xymon/PKGBUILD
@@ -1,7 +1,7 @@
 pkgbase=xymon
 pkgname=('xymonserver' 'xymonclient')
 pkgver=4.3.17
-pkgrel=11
+pkgrel=12
 pkgdesc="Xymon is a system for monitoring of hosts and networks"
 license="GPL"
 arch=('i686' 'x86_64')
@@ -25,14 +25,16 @@ source=("https://downloads.sourceforge.net/project/xymon/Xymon/$pkgver/$pkgbase-
         'alerts.cfg'
         'hobbit_myth_data.py'
         'xymon-gputemp.sh'
+        'xymon-smart.sh'
         'logrotate-server.xymon'
         'logrotate-client.xymon'
         'log_list.sh'
         'client-local.cfg.patch'
         'led_themes.tar.gz'
         'xymon-server.rules'
+        'xymon-client.rules'
         'hosts.cfg.patch')
-depends=('rrdtool' 'fping' 'pcre' 'python2' 'graphviz')
+depends=('rrdtool' 'fping' 'pcre' 'python2' 'graphviz' 'smartmontools')
 install=xymon.install
 
 build() {
@@ -81,6 +83,7 @@ package_xymonserver(){
     install -D -m755 ${srcdir}/hobbit_myth_data.py ${pkgdir}/home/xymon/server/ext/hobbit_myth_data.py
     install -D -m755 ${srcdir}/hobbit-mem-myth.sh ${pkgdir}/home/xymon/server/ext/hobbit-mem-myth.sh
     install -D -m755 ${srcdir}/xymon-gputemp.sh ${pkgdir}/home/xymon/server/ext/xymon-gputemp.sh
+    install -D -m755 ${srcdir}/xymon-smart.sh ${pkgdir}/home/xymon/server/ext/xymon-smart.sh
     install -D -m755 ${srcdir}/log_list.sh ${pkgdir}/home/xymon/client/bin/log_list.sh
 
     install -m755 analysis.cfg ${pkgdir}/home/xymon/etc/analysis.cfg
@@ -134,14 +137,16 @@ package_xymonserver(){
 
 package_xymonclient(){
     #create client package as well
-    depends=()
+    depends=('smartmontools')
     backup=('data/srv/xymon/client/etc/xymonclient.cfg')
     install=xymon-client.install
 
+    install -D -m400 ${srcdir}/xymon-client.rules ${pkgdir}/etc/sudoers.d/xymon_client
     install -D -m755 ${srcdir}/log_list.sh ${pkgdir}/home/xymon/client/bin/log_list.sh
     install -D -m644 ${srcdir}/logrotate-client.xymon ${pkgdir}/etc/logrotate.d/xymon-client
     install -D -m755 ${srcdir}/hobbit-mem-myth.sh ${pkgdir}/home/xymon/client/ext/hobbit-mem-myth.sh
     install -D -m755 ${srcdir}/xymon-gputemp.sh ${pkgdir}/home/xymon/client/ext/xymon-gputemp.sh
+    install -D -m755 ${srcdir}/xymon-smart.sh ${pkgdir}/home/xymon/client/ext/xymon-smart.sh
     cp -rp ${pkgdir}/../xymonserver/home/xymon/client/ ${pkgdir}/home/xymon/
 
     cd -
@@ -154,12 +159,12 @@ md5sums=('d8d119a777e7b7204d1292fb27314312'
          'a0fbb9cbeb3600a40943e6205790f22f'
          'c60b0d59bb39505ee3d62c6dd65429c5'
          '53f1af1054d3c70f4d6b6fe952cf7e11'
-         'b2f404913400a25f13c63b27f064ad2e'
-         'e40c31eb53ef17c0c544389a525de957'
-         '3ad3ce12b84cca82dd34ef97984c315e'
+         '510f36dfada9439f09327da5278bcdb1'
+         'c9f93372dce3489e23fb601a941818bb'
+         '8d024dfc58bacdfedfbddf8e78fd53eb'
          'b2f98ac0df013332deedc1efae0a270d'
          '4a8244c1bb44fe35ca7372355b01cec4'
-         '526c169e020b570b5b02661a831aa4e6'
+         'aa7c2eec6cd894dc171e90a4eed69de1'
          '166279c006c3ef7bf0c21537cf89fc83'
          '80d9cfac86c6d96836e6f406e35e7cf5'
          'd210c43fb9ee9ad6cd7648e0c2e0efea'
@@ -171,10 +176,12 @@ md5sums=('d8d119a777e7b7204d1292fb27314312'
          '9af2ad60ac4c3cb653754618f603e311'
          'a9b7f0a22f29f55b2928160bc44f2c14'
          '6452d891d88bb46d07bcf7790a523ad0'
+         '1348bef3cdd20ec0ea66d61ac1834847'
          'b4e8641e97e6b689dbc634af785e6799'
          'e2844513e2c92e8b5084818f3b2a478d'
          '98e9242ae346f729b14cb195786571f2'
          '31ac5c1f6dcc9408b64c4107b325a9a6'
          'c7178bbf384bbe86c318b60fef6faf10'
-         '72bf7caf0f53928d97ff5cd9810d6d4d'
+         '2871c53627e9e125922118013a868a95'
+         'cdfbca43dbae4ce0ca72dd002ec22af1'
          '606f535a49f32b35802ed9d46bd7d068')
diff --git a/abs/core/xymon/clientlaunch.cfg.patch b/abs/core/xymon/clientlaunch.cfg.patch
index 8c1915a..0348c6c 100755
--- a/abs/core/xymon/clientlaunch.cfg.patch
+++ b/abs/core/xymon/clientlaunch.cfg.patch
@@ -1,9 +1,9 @@
---- clientlaunch.cfg.orig       2014-10-25 11:56:01.947006791 -0500
-+++ clientlaunch.cfg    2014-10-25 11:57:02.632312788 -0500
-@@ -26,3 +26,14 @@
-        LOGFILE $XYMONCLIENTLOGS/xymonclient.log
-        INTERVAL 5m
-
+--- clientlaunch.cfg.orig	2015-02-19 22:50:43.102571615 +0000
++++ clientlaunch.cfg	2015-02-20 14:41:10.594633850 +0000
+@@ -26,3 +26,20 @@
+ 	LOGFILE $XYMONCLIENTLOGS/xymonclient.log
+ 	INTERVAL 5m
+ 
 +[memmyth]
 +       ENVFILE $XYMONCLIENTHOME/etc/xymonclient.cfg
 +       CMD  /home/xymon/client/ext/hobbit-mem-myth.sh
@@ -15,3 +15,9 @@
 +       CMD  /home/xymon/client/ext/xymon-gputemp.sh
 +       LOGFILE $XYMONCLIENTLOGS/xymon-gputemp.log
 +       INTERVAL 5m
++
++[smart]
++       ENVFILE $XYMONCLIENTHOME/etc/xymonclient.cfg
++       CMD  /home/xymon/client/ext/xymon-smart.sh
++       LOGFILE $XYMONCLIENTLOGS/xymon-smart.log
++       INTERVAL 30m
diff --git a/abs/core/xymon/hobbit-myth-orphan.sh b/abs/core/xymon/hobbit-myth-orphan.sh
index cc4ca30..ff91fb5 100644
--- a/abs/core/xymon/hobbit-myth-orphan.sh
+++ b/abs/core/xymon/hobbit-myth-orphan.sh
@@ -2,13 +2,10 @@
 TMPFILE=/tmp/oprhan.result
 MYTHCONFDIR=/usr/share/mythtv /usr/LH/bin/find_orphans.py --printonly > $TMPFILE
 
-
 COLUMN=orphan    # Name of the column
 COLOR=green      # By default, everything is OK
-MSG="No Orphans Found."
-
-
 
+MSG="No Orphans Found."
 
 #yellow
 for i in "Orphaned video files" "Orphaned snapshots" "Database backups" "Other files" "Recordings with missing files" "Zero byte recordings"
@@ -22,27 +19,18 @@ do
    fi
 done
 
-#red
-#for i in "Recordings with missing files" "Zero byte recordings"
-#do
-#   grep -q  "$i" $TMPFILE
-#   status=$?
-#   if [ $status -eq 0 ]
-#   then
-#       COLOR="red"
-#       MSG="Problems with $i"
-#   fi
-#done
-
+if [[ $MSG != "No Orphans Found." ]]
+then
 MSG="
     ${MSG}
-    `cat $TMPFILE` "
-# Tell Hobbit about it
-$BB $BBDISP "status $MACHINE.$COLUMN $COLOR `date`
-   ${MSG}
-   " 
-exit 0
-
-
+    `cat $TMPFILE`
 
+<b>From <a href="/shell/" target="_blank">System >> Terminal</a> run find_orphans.py to clean up these issues.</b>
+"
+fi
 
+# Tell Hobbit about it
+$BB $BBDISP "status $MACHINE.$COLUMN $COLOR Results from find_orphans.py
+    ${MSG}
+    "
+exit 0
diff --git a/abs/core/xymon/tasks.d.mv b/abs/core/xymon/tasks.d.mv
index 02afc14..f8ce177 100755
--- a/abs/core/xymon/tasks.d.mv
+++ b/abs/core/xymon/tasks.d.mv
@@ -42,4 +42,10 @@
        ENVFILE $XYMONCLIENTHOME/etc/xymonclient.cfg
        CMD  /home/xymon/server/ext/xymon-gputemp.sh
        LOGFILE $BBSERVERLOGS/xymon-gputemp.log
-       INTERVAL 5m
\ No newline at end of file
+       INTERVAL 5m
+
+[smart]
+       ENVFILE $XYMONCLIENTHOME/etc/xymonclient.cfg
+       CMD  /home/xymon/server/ext/xymon-smart.sh
+       LOGFILE $BBSERVERLOGS/xymon-smart.log
+       INTERVAL 30m
diff --git a/abs/core/xymon/xymon-client.rules b/abs/core/xymon/xymon-client.rules
new file mode 100644
index 0000000..f13b3f6
--- /dev/null
+++ b/abs/core/xymon/xymon-client.rules
@@ -0,0 +1,3 @@
+#These rules are used by xymon-client
+nobody    ALL = NOPASSWD:/usr/bin/smartctl
+
diff --git a/abs/core/xymon/xymon-server.rules b/abs/core/xymon/xymon-server.rules
index b0f6100..e4c515b 100644
--- a/abs/core/xymon/xymon-server.rules
+++ b/abs/core/xymon/xymon-server.rules
@@ -1,5 +1,6 @@
 #These rules are used by xymon-server
 nobody    ALL = NOPASSWD:/usr/bin/certmaster-ca
+nobody    ALL = NOPASSWD:/usr/bin/smartctl
 http    ALL = NOPASSWD:/usr/LH/bin/lh_system_backup_job
 http    ALL = NOPASSWD:/usr/LH/bin/lh_system_restore_job
 http    ALL = NOPASSWD:/sbin/sv
diff --git a/abs/core/xymon/xymon-smart.sh b/abs/core/xymon/xymon-smart.sh
new file mode 100755
index 0000000..1ad3cc7
--- /dev/null
+++ b/abs/core/xymon/xymon-smart.sh
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+# NOTE: Must be run as root, so you probably need to setup sudo for this.
+
+if test -f /tmp/dres; then rm -f /tmp/dres; fi
+
+# MODIFY below to match your setup - the "scsi-SATA" is pretty generic, but you
+# can add more disks if you like. E.g. I have a USB disk permanently plugged in.
+
+ls /dev/disk/by-id/scsi-* /dev/disk/by-id/ata-* /dev/disk/by-id/usb-* | grep -v -- -part | sort |
+while read DISK
+do
+    DISKDEV=`ls -l $DISK | awk -F/ '{print $NF}'`
+
+    #check if disk is removable
+    RM=`cat /sys/block/$DISKDEV/removable`
+    if test $RM -ne 0
+    then
+        continue
+    fi
+
+    DRES=`sudo /usr/sbin/smartctl -H -n standby $DISK`
+    DCODE=$?
+    DSTBY=$(( $DCODE & 2 ))
+    DFAIL=$(( $DCODE & 8 ))
+    DWARN=$(( $DCODE & 32 ))
+
+    if test $DSTBY -ne 0
+    then
+        COLOR="4&clear"
+    elif test $DFAIL -ne 0
+    then
+        COLOR="1&red"
+    elif test $DWARN -ne 0
+    then
+        COLOR="2&yellow"
+    else
+        COLOR="3&green"
+    fi
+
+    echo "${COLOR} $DISK (/dev/$DISKDEV)"
+
+    echo "${COLOR} $DISK (/dev/$DISKDEV)" | cut -c2- >>/tmp/dres
+    echo "" >>/tmp/dres
+    echo "$DRES" | egrep -v "^smartctl|^Copyright|^$|^===" >>/tmp/dres
+    echo "-----------------------------------------------------------------------------" >>/tmp/dres
+    echo "" >>/tmp/dres
+    echo "" >>/tmp/dres
+done >/tmp/dcheck
+
+COLOR=`cat /tmp/dcheck | awk '{print $1}' | sort | uniq | head -1 | cut -c3-`
+
+$XYMON $XYMSRV "status ${MACHINE}.smart ${COLOR} SMART Health Check
+
+`cat /tmp/dcheck | cut -c2-`
+
+============================== Detailed status ==============================
+
+`cat /tmp/dres`
+"
+
+rm -f /tmp/dres /tmp/dcheck
+
+exit 0
+
diff --git a/abs/core/xymon/xymonserver.cfg.diff b/abs/core/xymon/xymonserver.cfg.diff
index 8850670..5432767 100755
--- a/abs/core/xymon/xymonserver.cfg.diff
+++ b/abs/core/xymon/xymonserver.cfg.diff
@@ -18,7 +18,7 @@
  # status view of a test should include a graph.
 -TEST2RRD="cpu=la,disk,inode,qtree,memory,$PINGCOLUMN=tcp,http=tcp,dns=tcp,dig=tcp,time=ntpstat,vmstat,iostat,netstat,temperature,apache,bind,sendmail,mailq,nmailq=mailq,socks,bea,iishealth,citrix,bbgen,bbtest,bbproxy,hobbitd,files,procs=processes,ports,clock,lines,ops,stats,cifs,JVM,JMS,HitCache,Session,JDBCConn,ExecQueue,JTA,TblSpace,RollBack,MemReq,InvObj,snapmirr,snaplist,snapshot,if_load=devmon,temp=devmon,paging,mdc,mdchitpct,cics,dsa,getvis,maxuser,nparts,xymongen,xymonnet,xymonproxy,xymond"
 +#TEST2RRD="cpu=la,disk,inode,qtree,memory,$PINGCOLUMN=tcp,http=tcp,dns=tcp,dig=tcp,time=ntpstat,vmstat,iostat,netstat,temperature,apache,bind,sendmail,mailq,nmailq=mailq,socks,bea,iishealth,citrix,bbgen,bbtest,bbproxy,hobbitd,files,procs=processes,ports,clock,lines,ops,stats,cifs,JVM,JMS,HitCache,Session,JDBCConn,ExecQueue,JTA,TblSpace,RollBack,MemReq,InvObj,snapmirr,snaplist,snapshot,if_load=devmon,temp=devmon,paging,mdc,mdchitpct,cics,dsa,getvis,maxuser,nparts,xymongen,xymonnet,xymonproxy,xymond"
-+TEST2RRD="cpu=la,disk,inode,qtree,memory,$PINGCOLUMN=tcp,http=tcp,dns=tcp,dig=tcp,time=ntpstat,vmstat,iostat,netstat,temperature,apache,bind,sendmail,mailq,nmailq=mailq,socks,bea,iishealth,citrix,bbgen,bbtest,bbproxy,hobbitd,files,procs=processes,ports,clock,lines,ops,stats,cifs,JVM,JMS,HitCache,Session,JDBCConn,ExecQueue,JTA,TblSpace,RollBack,MemReq,InvObj,snapmirr,snaplist,snapshot,if_load=devmon,temp=devmon,paging,mdc,mdchitpct,cics,dsa,getvis,maxuser,nparts,xymongen,xymonnet,xymonproxy,xymond,storage=ncv,memmbe=ncv,memmfe=ncv,gputemp=ncv"
++TEST2RRD="cpu=la,disk,inode,qtree,memory,$PINGCOLUMN=tcp,http=tcp,dns=tcp,dig=tcp,time=ntpstat,vmstat,iostat,netstat,temperature,apache,bind,sendmail,mailq,nmailq=mailq,socks,bea,iishealth,citrix,bbgen,bbtest,bbproxy,hobbitd,files,procs=processes,ports,clock,lines,ops,stats,cifs,JVM,JMS,HitCache,Session,JDBCConn,ExecQueue,JTA,TblSpace,RollBack,MemReq,InvObj,snapmirr,snaplist,snapshot,if_load=devmon,temp=devmon,paging,mdc,mdchitpct,cics,dsa,getvis,maxuser,nparts,xymongen,xymonnet,xymonproxy,xymond,storage=ncv,memmbe=ncv,memmfe=ncv,gputemp=ncv,smart"
 
  # This defines which RRD files to include on the "trends" column webpage,
  # and the order in which they appear.
-- 
cgit v0.12

