File: 1223

package info (click to toggle)
pcp 7.1.0-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 252,748 kB
  • sloc: ansic: 1,483,656; sh: 182,366; xml: 160,462; cpp: 83,813; python: 24,980; perl: 18,327; yacc: 6,877; lex: 2,864; makefile: 2,738; awk: 165; fortran: 60; java: 52
file content (190 lines) | stat: -rwxr-xr-x 4,956 bytes parent folder | download
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#!/bin/sh
# PCP QA Test No. 1223
# pmlogctl - multiple pmloggers per control file tests
# (migration from an existing config, or hand-edited, as pmlogctl create
# will not set it up this way)
#
# 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

_cleanup()
{
    echo "_cleanup: ..." >>$seq_full
    cd $here
    $sudo pmlogctl -af -c $seq destroy >>$seq_full 2>&1
    for dir in $seq-localhost $seq-$localhost $seq-local:
    do
	[ -d "$PCP_ARCHIVE_DIR/$dir" ] && $sudo rm -rf "$PCP_ARCHIVE_DIR/$dir"
    done
    $sudo rm -rf $tmp $tmp.*
}

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

localhost=`hostname`
echo "localhost -> \"$localhost\"" >>$seq_full
echo "hostname -f -> \"`hostname -f 2>&1`\"" >>$seq_full
echo "pmhostname -> `pmhostname -Dappl0 2>&1`" >>$seq_full
host localhost >>$seq_full 2>&1
host $localhost >>$seq_full 2>&1
host `hostname -f 2>&1` >>$seq_full 2>&1
host `pmhostname` >>$seq_full 2>&1

_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 's/PID=[0-9][0-9]*/PID=<somepid>/' \
	-e 's/PID [0-9][0-9]*/PID <somepid>/' \
	-e 's/TERM [0-9][0-9]*/TERM <somepid>/' \
    # end
}

# Build filter for any existing non-qa and non-primary pmlogger instances.
# The "pmcd Host" and "Class" fields from the pmlogctl status output
# should suffice to uniquely identify each.
#
pmlogctl status 2>&1 \
| $PCP_AWK_PROG >$tmp.awk '
NR == 1	{ next }
NF >= 5	{ if ($3 == "primary") next
	  print "$1 == \"" $1 "\" && $3 == \"" $3 "\" { next }"
	}
END	{ print "{ print }" }'

# Note:
# 	Status command output order is non-deterministic, hence the sort
#	at the end
# Another note:
#     Strange in CI, some platforms report an instance name like
#	1223-<hostname><space>
#     the trailing space is a total mystery, but just filter it away
#     here (see 2nd ;-$localhost..; sed) as there is no other apparent
#     failure
#
_filter_status()
{
    tee -a $seq_full \
    | $PCP_AWK_PROG -f $tmp.awk \
    | sed >$tmp.tmp \
	-e "/^`hostname` .* primary /d" \
	-e 's/[ 	][ 	]*/ /g' \
	-e 's/2[0-9][0-9][0-9][01][0-9][0-3][0-9]\...\.[^ ]*/<archivename>/' \
	-e "s/^$localhost /LOCALHOSTNAME /" \
	-e "s;/$localhost\([ /]\);/LOCALHOSTNAME\1;" \
	-e "s;-$localhost\$;-LOCALHOSTNAME;" \
	-e "s;-$localhost \$;-LOCALHOSTNAME;" \
	-e "s/ $seq / <seq> /" \
	-e 's/ [0-9][0-9]* / <pid> /' \
	-e 's/ $//' \
    # end
    head -1 $tmp.tmp
    sed -e '1d' $tmp.tmp | LC_COLLATE=POSIX sort
}

cat <<End-of-File >$tmp.policy
[class]
$seq
[ident]
$seq-%h
[control]
\$version=1.1
%h n n PCP_ARCHIVE_DIR/%i -c $tmp.config
End-of-File

cat <<End-of-File >$tmp.config
log mandatory on default { pmcd.pmlogger }
End-of-File

cat <<End-of-File >$tmp.control
# Installed by PCP QA test $seq on `date`
\$class=$seq
\$version=1.1

# eeny
local: n n PCP_ARCHIVE_DIR/$seq-local: -r -c $tmp.config

# meeny
localhost n n PCP_ARCHIVE_DIR/$seq-localhost -r -c $tmp.config

# miney
LOCALHOSTNAME n n PCP_ARCHIVE_DIR/$seq-LOCALHOSTNAME -r -c $tmp.config

# mo
End-of-File

_setup()
{
    $sudo cp $tmp.control $PCP_ETC_DIR/pcp/pmlogger/control.d/$seq
    echo "=== setup" >>$seq_full
    $sudo pmlogctl -V -c $seq restart >>$seq_full 2>&1
    pmlogctl -V status >>$seq_full 2>&1
}

# real QA test starts here
_setup

if false
then
    if echo "$localhost" | grep '^[0-9][0-9a-f]*$' >>/dev/null
    then
	# special for CI ...
	#
	pmlogctl status
	$sudo pmlogctl -c $seq -VV stop LOCALHOSTNAME
	pmlogctl -V status
	$sudo pmlogctl -c $seq -VV start LOCALHOSTNAME
	pmlogctl -V status
    fi
fi

for host in LOCALHOSTNAME local: localhost
do
    echo "== stop $host" | _filter
    $sudo pmlogctl -c $seq stop "$host" 2>&1 | _filter
    diff $tmp.control $PCP_ETC_DIR/pcp/pmlogger/control.d/$seq | _filter
    pmlogctl -V status 2>&1 | _filter_status
done

echo
for host in LOCALHOSTNAME local: localhost
do
    echo "== start $host" | _filter
    $sudo pmlogctl -c $seq start "$host" 2>&1 | _filter
    diff $tmp.control $PCP_ETC_DIR/pcp/pmlogger/control.d/$seq | _filter
    pmlogctl -V status 2>&1 | _filter_status
done

echo
for host in LOCALHOSTNAME local: localhost
do
    echo "== destroy $host" | _filter
    $sudo pmlogctl -f -c $seq destroy "$host" 2>&1 | _filter
    if [ -f $PCP_ETC_DIR/pcp/pmlogger/control.d/$seq ]
    then
	diff $tmp.control $PCP_ETC_DIR/pcp/pmlogger/control.d/$seq | _filter
    else
	echo "PCP_ETC_DIR/pcp/pmlogger/control.d/$seq has gone away"
    fi
    pmlogctl -V status 2>&1 | _filter_status
done

# success, all done
status=0
exit