#!/bin/sh # # daemontools-status # Dump the output of svstat to a html page for viewing on the web. # AUTHOR="Mike Arnold " VERSION="200212031739" # ############################################################ # README # # set $SERVICE_DIR/$SERVICE/supervise to chmod go+rx # set $SERVICE_DIR/$SERVICE/supervise/ok to chmod go+rw # -or- # run this program as root # # HTML can be customized via dstatus.css # crontab entry: */10 * * * * /path/to/daemontools-status # ############################################################ # VARIABLES SERVERNAME="hostname.domain.org" SERVICE_DIR="/service" SERVICE="axfrdns dnscache publicfile tinydns" OUTFILE_DIR="." OUTFILE="${OUTFILE_DIR}/index.html" ############### NOTHING TO MODIFY BELOW HERE ############### PATH=/usr/local/bin:$PATH # FUNCTIONS convert_seconds () { INPUT=$1 TEMP0=`expr $INPUT / 60` SECOND=`expr $INPUT - $TEMP0 \* 60` TEMP1=`expr $TEMP0 / 60` MINUTE=`expr $TEMP0 - $TEMP1 \* 60` TEMP2=`expr $TEMP1 / 24` HOUR=`expr $TEMP1 - $TEMP2 \* 24` TEMP3=`expr $TEMP2 / 7` DAY=`expr $TEMP2 - $TEMP3 \* 7` WEEK=$TEMP3 echo "$WEEK weeks, $DAY days, $HOUR hours, $MINUTE minutes, $SECOND seconds" } print_service () { #echo "1 = $1 2 = $2 3 = $3" if [ "$1" = "UP" ]; then echo "" >> $OUTFILE.$$ echo " $2" >> $OUTFILE.$$ echo " up for `convert_seconds $3`" >> $OUTFILE.$$ echo "" >> $OUTFILE.$$ elif [ "$1" = "DOWN" ]; then echo "" >> $OUTFILE.$$ echo " $2" >> $OUTFILE.$$ echo " down for `convert_seconds $3`" >> $OUTFILE.$$ echo "" >> $OUTFILE.$$ elif [ "$1" = "ERR" ]; then echo "" >> $OUTFILE.$$ echo " $2" >> $OUTFILE.$$ echo " error $3" >> $OUTFILE.$$ echo "" >> $OUTFILE.$$ else echo "print_service is broken" fi } # MAIN # print_header cat << EOF > $OUTFILE.$$ $SERVERNAME Server Status

$SERVERNAME Server Status

EOF # print_status for SVC in $SERVICE do VAR=`svstat ${SERVICE_DIR}/$SVC | awk '$2 ~ /^up$/ {print $1,$2,$5} $2 ~ \ /^down$/ {print $1,$2,$3,$5,$6,$7} $2 !~ /^up$/ && $2 !~ /^down$/ \ {print $0}' | sed -e 's/\/var\/services\///' -e 's/://'` A2=`echo $VAR | awk '{print $2}'` A3=`echo $VAR | awk '{print $3,$4,$5,$6,$7,$8,$9}'` if [ "$A2" = "up" ]; then print_service UP $SVC "$A3" elif [ "$A2" = "down" ]; then print_service DOWN $SVC "$A3" else print_service ERR $SVC "$A2 $A3" fi done # print_update cat << EOF >> $OUTFILE.$$
Last Update: `date +"%T (UTC%z)"`
EOF mv $OUTFILE.$$ $OUTFILE