1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
#!/bin/sh
# PCP QA Test No. 1232
# pmlogger_daily -k 0 tests
#
# Copyright (c) 2020 Ken McDonell. All Rights Reserved.
#
seq=`basename $0`
echo "QA output created by $seq"
# get standard environment, filters and checks
. ./common.product
. ./common.filter
. ./common.check
if pmlogctl -c default status 2>/dev/null | grep ' default ' >/dev/null
then
_notrun "at least one pmlogger already defined for \"default\" class"
fi
NEEDREWRITE=$PCP_LOG_DIR/pmlogger/.NeedRewrite
_cleanup()
{
echo "_cleanup: ..." >>$seq_full
cd $here
$sudo pmlogctl -f -c default destroy localhost >>$seq_full 2>&1
$sudo rm -rf $tmp $tmp.*
$sudo rm -rf $PCP_ARCHIVE_DIR/localhost
[ -f $NEEDREWRITE.$seq ] && $sudo mv $NEEDREWRITE.$seq $NEEDREWRITE
}
status=1 # failure is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15
[ -f $NEEDREWRITE ] && $sudo mv $NEEDREWRITE $NEEDREWRITE.$seq
_filter()
{
tee -a $seq_full \
| sed \
-e '/^# created by pmlogctl/s/ on .*/ on DATE/' \
-e "s;$tmp\.;TMP.;g" \
-e "s;$PCP_BINADM_DIR/;PCP_BINADM_DIR/;g" \
-e "s;$PCP_ARCHIVE_DIR/;PCP_ARCHIVE_DIR/;g" \
-e "s;$PCP_TMP_DIR/;PCP_TMP_DIR/;g" \
-e "s;$PCP_TMPFILE_DIR/pmlogctl\.[^/]*;PCP_TMPFILE_DIR/pmlogctl.XXXXX;g" \
-e "s;$PCP_ETC_DIR/;PCP_ETC_DIR/;g" \
-e "/migrate_pid_service/d" \
-e '/^_parse_log_control:/d' \
# end
}
# usual stuff, but then need to deal with different implementations
# of fmt(1) that wrap the unfiltered list of processed archives in
# different places ... the final sed stanze undoes the fmt line
# breaks
#
_filter_log()
{
cat \
| _filter \
| sed \
-e '1,/=== daily /d' \
-e '/^Start:/d' \
-e '/^End[: ]/d' \
-e '/^COMPRESSAFTER=/d' \
-e '/^\+ /d' \
-e '/^\.\.\. try /d' \
-e '/^\.\.\. logging for /d' \
-e '/no pmlogger instance running /d' \
-e '/skipping log rotation/d' \
-e '/^Skip sending SIGUSR2 to /d' \
-e '/[0-9][0-9]* identified/s//PID identified/' \
-e '/current [0-9][0-9.-]* archive/s//current DATE archive/' \
-e 's/ [0-9][0-9.-]*.index/ DATE.index/g' \
-e 's/ [0-9][0-9.-]*.meta/ DATE.meta/g' \
-e 's/ [0-9][0-9.-]*.0/ DATE.0/g' \
-e '/ DATE/{
s/\.xz//g
s/\.lzma//g
s/\.bz2//g
s/\.bz//g
s/\.gz//g
s/\.Z//g
s/\.z//g
}' \
| sed -e '/^ DATE/{
:loop
$!N
s/\n DATE/ DATE/
t loop
}'
}
# get our pmlogger running
#
$sudo pmlogctl -V create localhost 2>&1 | _filter
# real QA test starts here
control=$PCP_ETC_DIR/pcp/pmlogger/control.d/localhost
# pmlogger_daily needs to be able to cd back to here
#
cd /tmp
echo
echo "only one current archive, expect no culling"
$sudo -u $PCP_USER -g $PCP_GROUP $PCP_BINADM_DIR/pmlogger_daily -c $control \
-P -N -VV -k 0 -x never 2>&1 \
| _filter_log
echo
echo "one archive, cull it"
$sudo pmlogctl stop localhost
$sudo -u $PCP_USER -g $PCP_GROUP $PCP_BINADM_DIR/pmlogger_daily -c $control \
-P -N -VV -k 0 -x never 2>&1 \
| _filter_log
echo
echo "cull old archive, skip current one"
$sudo pmlogctl start localhost
$sudo -u $PCP_USER -g $PCP_GROUP $PCP_BINADM_DIR/pmlogger_daily -c $control \
-P -N -VV -k 0 -x never 2>&1 \
| _filter_log
echo
echo "two archives, cull 'em"
$sudo pmlogctl stop localhost
$sudo -u $PCP_USER -g $PCP_GROUP $PCP_BINADM_DIR/pmlogger_daily -c $control \
-P -N -VV -k 0 -x never 2>&1 \
| _filter_log
# success, all done
status=0
exit
|