#! /bin/sh
# PCP QA Test No. 530
# pmlogger_daily ... do you work at all?
#
# OLD VERSION for YYDDMM style naming convention (see also 338)
#
# NOTE - THIS TEST WILL FAIL IF RUN IN THE FIRST 5 MINUTES AFTER
# MIDNIGHT - c'est la vie, I'm afraid.
#
# Copyright (c) 1995-2002 Silicon Graphics, Inc.  All Rights Reserved.
#
# check-group-include: pmlogextract
#

seq=`basename $0`
echo "QA output created by $seq"

# get standard filters
. ./common.product
. ./common.filter
. ./common.check

# This test is not stable in the vicinity of a timezone change, e.g.
# daylight saving or summer time transitions.
# Don't run if this happened in the last 2 days.
#
now_hr=`pmdate '%H'`
now_hr_2=`pmdate -2d '%H'`
if [ "$now_hr" != "$now_hr_2" ]
then
    _notrun "timezone change? now = ${now_hr}H:??M, 2 days ago = ${now_hr_2}H:??M"
    # NOTREACHED
fi

NEEDREWRITE=$PCP_LOG_DIR/pmlogger/.NeedRewrite

_cleanup()
{
    cd $here
    $sudo rm -rf $tmp $tmp.*
    $sudo mv $PCP_LOG_DIR/NOTICES.$seq $PCP_LOG_DIR/NOTICES
    [ -f $NEEDREWRITE.$seq ] && $sudo mv $NEEDREWRITE.$seq $NEEDREWRITE
}

_filter()
{
    tee -a $seq.full \
    | $PCP_AWK_PROG '
/^Archive files older than/	{ eatlines=1; longone="   "; print; next; }
eatlines			{ if ( match ($0, "^    ") ) {
				    for ( i=1; i <=NF; i++ ) {
					longone = sprintf ("%s %s",longone,$i);
				    }
				  } else {
				    print longone | "fmt -76";
				    close ("fmt -76"); 
				    longone = ""; eatlines = 0; 
				    print;  
				  }
				  next;
				}
END				{ if ( eatlines ) {
				    print longone | "fmt -76";
				    close ("fmt -76"); 
				  }
				}
				{ print }' \
    | sed -f $tmp.sed \
    | sed \
	-e '/^Roll .*\/NOTICES/d' \
	-e '/^Start .*\/NOTICES/d' \
	-e "s;$tmp;TMP;g" \
	-e "s/`hostname`/HOST/g" \
	-e "s/localhost/HOST/g" \
	-e "s/local:/HOST/g" \
	-e "s/`hostname | sed -e 's/\..*//'`/HOST/g" \
	-e '/\/var\/adm\/pcplog\/NOTICES/d' \
	-e 's/-rw-r--r--\./-rw-r--r--/' \
    | $PCP_AWK_PROG '
/-rw-r--r--/	{ print $1,"...",$5,"...",$9; next }
		{ print }' \
    | _filter_cron_scripts
}

status=1	# failure is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15

[ -f $NEEDREWRITE ] && $sudo mv $NEEDREWRITE $NEEDREWRITE.$seq

# take explicit control of the umask
#
umask 022

$sudo mv $PCP_LOG_DIR/NOTICES $PCP_LOG_DIR/NOTICES.$seq
rm -f $seq.full

# real QA test starts here
unset verbose
for loop in 1 2
do
    $sudo rm -rf $tmp
    mkdir $tmp
    echo >$tmp.sed
    for day in 0 1 2 3 4 5
    do
	fmt=%y%m%d
	# aiming for the time to be 00:02 and 00:04 on each day,
	# even if that is ahead of NOW for today
	#
	now_hr=`pmdate %H`
	hour=-$now_hr
	now_min=`pmdate %M`
	min2=`expr 2 - $now_min`
	[ "$min2" -ge 0 ] && min2="+$min2"
	min4=`expr 4 - $now_min`
	[ "$min4" -ge 0 ] && min4="+$min4"
	namea=`pmdate -${day}d ${hour}H ${min2}M $fmt.%H.%M`
	nameb=`pmdate -${day}d ${hour}H ${min4}M $fmt.%H.%M`
	yesterday=`pmdate -1d ${hour}H ${min2}M $fmt`
	stampa=`echo $namea | sed -e 's/\.//g'`
	stampb=`echo $nameb | sed -e 's/\.//g'`
	echo "s/$namea/NOW-$day.00.02/g" >>$tmp.sed
	echo "s/$nameb/NOW-$day.00.04/g" >>$tmp.sed

	for ext in 0 index meta
	do
	    cp archives/arch_a.$ext $tmp/$namea.$ext
	    touch -t $stampa $tmp/$namea.$ext
	    cp archives/arch_b.$ext $tmp/$nameb.$ext
	    touch -t $stampb $tmp/$nameb.$ext
	done
    done
    ls -lt $tmp >>$seq.full
    echo "s/NOW-0/TODAY/g" >>$tmp.sed
    echo "s/NOW-1/YESTERDAY/g" >>$tmp.sed
    echo "s/`pmdate %y%m%d`/TODAY/g" >>$tmp.sed
    echo "s/$yesterday/YESTERDAY/g" >>$tmp.sed

    echo >$tmp.control '$version=1.1
LOCALHOSTNAME	n   n	'"$tmp"'	./config'

    # pmlogger_daily runs as the user "pcp" ... fix ownership
    #
    $sudo touch $tmp.log
    find $tmp $tmp.log -type f | xargs $sudo chown $PCP_USER:$PCP_GROUP
    $sudo chown $PCP_USER:$PCP_GROUP $tmp

    echo
    echo "=== [${verbose+verbose}] regular show ==="
    echo "=== [${verbose+verbose}] regular show ===" >>$seq.full
    $sudo -u $PCP_USER -g $PCP_GROUP sh -c "umask 022; $PCP_BINADM_DIR/pmlogger_daily -o -x never -c $tmp.control -k 4 $verbose -l $tmp.log"
    $sudo cat $tmp.log | _filter
    ls $tmp | sed -f $tmp.sed | LC_COLLATE=POSIX sort

    echo
    echo "=== [${verbose+verbose}] nothing to do but cull some more ==="
    echo "=== [${verbose+verbose}] nothing to do but cull some more ===" >>$seq.full
    for ext in 0 index meta
    do
	$sudo mv $tmp/$yesterday.$ext $tmp/save.$ext
    done
    $sudo -u $PCP_USER -g $PCP_GROUP sh -c "umask 022; $PCP_BINADM_DIR/pmlogger_daily -o -x never -c $tmp.control -k 3 $verbose -l $tmp.log"
    $sudo cat $tmp.log | _filter
    ls $tmp | sed -f $tmp.sed | LC_COLLATE=POSIX sort

    echo
    echo "=== [${verbose+verbose}] error, output already exists ==="
    echo "=== [${verbose+verbose}] error, output already exists ===" >>$seq.full
    for ext in 0 index meta
    do
	$sudo cp archives/arch_a.$ext $tmp/$yesterday.17.18.$ext
	$sudo chown $PCP_USER:$PCP_GROUP $tmp/$yesterday.17.18.$ext
	$sudo mv $tmp/save.$ext $tmp/$yesterday.$ext
    done
    $sudo -u $PCP_USER -g $PCP_GROUP sh -c "umask 022; $PCP_BINADM_DIR/pmlogger_daily -o -x never -c $tmp.control -k 3 $verbose -l $tmp.log"
    $sudo cat $tmp.log | _filter
    ls $tmp | sed -f $tmp.sed | LC_COLLATE=POSIX sort

    verbose=-V
done

# all done
status=0
exit
