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