ports/117848: [patch] sysutils/areca-cli periodic script
Bjoern A. Zeeb
bzeeb+freebsdports at zabbadoz.net
Mon Nov 5 18:10:01 UTC 2007
>Number: 117848
>Category: ports
>Synopsis: [patch] sysutils/areca-cli periodic script
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Mon Nov 05 18:10:01 UTC 2007
>Closed-Date:
>Last-Modified:
>Originator: Bjoern A. Zeeb
>Release: FreeBSD 7.0-CURRENT amd64
>Organization:
Zabbadoz.NeT
>Environment:
>Description:
Add periodic script for areca-cli output in daily mails.
>How-To-Repeat:
>Fix:
You can also fetch it from
http://sources.zabbadoz.net/freebsd/ports/experimental/sysutils-areca-cli-407.2007110501.diff
changed files: Makefile
new files: files/407.status-areca-raid.in
OKed by: rink (maintainer)
Index: Makefile
===================================================================
RCS file: /export/media/FreeBSD/cvsup/r/pcvs/ports/sysutils/areca-cli/Makefile,v
retrieving revision 1.1
diff -u -p -r1.1 Makefile
--- Makefile 17 Jul 2006 17:24:13 -0000 1.1
+++ Makefile 5 Nov 2007 09:27:12 -0000
@@ -17,7 +17,10 @@ COMMENT= Command Line Interface for the
ONLY_FOR_ARCHS= i386 amd64
+PERIODICSCRIPT= 407.status-areca-raid
+
PLIST_FILES= sbin/areca-cli
+PLIST_FILES+= etc/periodic/daily/${PERIODICSCRIPT}
USE_ZIP= yes
NO_BUILD= yes
@@ -25,7 +28,11 @@ NO_BUILD= yes
CLI_VER= 1.5
CLI_REV= 50930
+SUB_FILES+= ${PERIODICSCRIPT}
+
do-install:
${INSTALL_PROGRAM} ${WRKSRC}/cli32 ${PREFIX}/sbin/areca-cli
+ @${MKDIR} ${PREFIX}/etc/periodic/daily
+ ${INSTALL_SCRIPT} ${WRKDIR}/${PERIODICSCRIPT} ${PREFIX}/etc/periodic/daily
.include <bsd.port.mk>
Index: files/407.status-areca-raid.in
===================================================================
RCS file: files/407.status-areca-raid.in
diff -N files/407.status-areca-raid.in
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ files/407.status-areca-raid.in 5 Nov 2007 09:27:12 -0000
@@ -0,0 +1,143 @@
+#!/bin/sh
+#
+# Shows status of areca RAID controllers: arcmsr(4)
+#
+# Authors: Bjoern A. Zeeb
+#
+# $FreeBSD$
+#
+
+# If there is a global system configuration file, suck it in.
+#
+if [ -r /etc/defaults/periodic.conf ]
+then
+ . /etc/defaults/periodic.conf
+ source_periodic_confs
+fi
+
+# Defaults.
+: ${daily_status_arcmsr_raid_enable:=NO}
+# Verbose.
+: ${daily_status_arcmsr_raid_verbose:=YES}
+# SMART.
+: ${daily_status_arcmsr_raid_smart:=YES}
+# Logs persist between "areca-cli event info" invocation?
+: ${daily_status_arcmsr_raid_persist_logs:=YES}
+
+areca_cli=${areca_cli:-%%PREFIX%%/sbin/areca-cli}
+logdir=${logdir:-/var/log}
+
+verbose()
+{
+ local cmd
+ local scmd
+ local log
+ cmd=$1
+ scmd=$2
+ log=$3
+
+ case ${daily_status_arcmsr_raid_verbose} in
+ [Nn][Oo])
+ return
+ ;;
+ *) ;;
+ esac
+
+ ${areca_cli} ${cmd} ${scmd} >> ${log}
+}
+
+smart()
+{
+ local log
+ local disk
+ log=$1
+
+ case ${daily_status_arcmsr_raid_smart} in
+ [Nn][Oo])
+ return
+ ;;
+ *) ;;
+ esac
+
+ for disk in `${areca_cli} disk info | awk '
+ BEGIN { run=0 }
+ { if (/^=======/) {
+ if (run==0) { run=1; } else { run=0; } }
+ else { if (run==1) { printf "%d ", $1; } } };'`; do
+ echo "SMART data for disk ${disk}" >> ${log}
+ ${areca_cli} disk smart drv=${disk} >> ${log}
+ done
+}
+
+case "$daily_status_arcmsr_raid_enable" in
+ [Yy][Ee][Ss])
+ echo
+ echo 'Checking status of Areca RAID controllers:'
+
+ rc=0
+
+ # Checking the currently selected (1st) controller.
+ # XXX TODO set curctrl=[1..4]; along with that
+ # XXX TODO try to only call areca-cli once (per ctrl).
+ echo ""
+ echo "Controller ${ctrl}:"
+ ctrl_log=${logdir}/arcmsr_raid_${ctrl}
+ if test ! -f ${ctrl_log}.today; then
+ touch ${ctrl_log}.today
+ fi
+ mv -f ${ctrl_log}.today ${ctrl_log}.yesterday
+ # Not too efficient to call areca_cli lots of times.
+ verbose sys info ${ctrl_log}.today
+ ${areca_cli} rsf info >> ${ctrl_log}.today
+ verbose vsf info ${ctrl_log}.today
+ verbose disk info ${ctrl_log}.today
+ smart ${ctrl_log}.today
+ verbose hw info ${ctrl_log}.today
+ lines=`wc -l ${ctrl_log}.today | awk '{ print $1 }'`
+ diff -u -$lines ${ctrl_log}.yesterday ${ctrl_log}.today
+ raid_rc=$?
+ if test $raid_rc -eq 0; then
+ cat ${ctrl_log}.today
+ fi
+ [ $rc -eq 0 ] && [ $raid_rc -ne 0 ] && rc=3
+
+ # Checking logs.
+ echo "Logs (most recent first):"
+ logs_log=${logdir}/arcmsr_log_${ctrl}
+ case "$daily_status_arcmsr_raid_persist_logs" in
+ [Yy][Ee][Ss])
+ if test ! -f ${logs_log}.today; then
+ touch ${logs_log}.today
+ fi
+ mv -f ${logs_log}.today ${logs_log}.yesterday
+ ${areca_cli} event info > ${logs_log}.today
+ cmp -zs ${logs_log}.yesterday ${logs_log}.today
+ raid_rc=$?
+ if test $raid_rc -ne 0; then
+ diff -u ${logs_log}.yesterday ${logs_log}.today | \
+ grep -v '^-\|^$'
+ fi
+ ;;
+ *)
+ raid_rc=0
+ ${areca_cli} event info > ${logs_log}.today
+ ${areca_cli} event clear >> ${logs_log}.today
+ lines=`wc -l ${logs_log}.today | awk '{ print $1 }'`
+ if test $lines -gt 4; then
+ cat ${logs_log}.today
+ raid_rc=1
+ fi
+ ;;
+ esac
+ if test $raid_rc -eq 0; then
+ echo " No new alarms."
+ fi
+ [ $rc -eq 0 ] && [ $raid_rc -ne 0 ] && rc=3
+ ;;
+
+ *) rc=0;;
+esac
+
+exit $rc
+
+# end
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list