File: 1249

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 (343 lines) | stat: -rwxr-xr-x 11,538 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
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
#!/bin/sh
# PCP QA Test No. 1249
# pmiectl - cond-create
#
# see qa/1248 for the pmlogctl version of this test
#
# 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 pmiectl -c pmfind status 2>/dev/null | grep ' pmfind ' >/dev/null
then
    _notrun "at least one pmie already defined for \"pmfind\" class"
fi

_cleanup()
{
    echo "_cleanup: ..." >>$seq_full
    cd $here
    $sudo pmiectl -af -c pmfind destroy localhost >>$seq_full 2>&1
    $sudo rm -rf $PCP_ETC_DIR/pcp/pmie/class.d/$seq.?
    $sudo rm -rf $tmp $tmp.*
    for blob in $seq $seq-a $seq-b $seq-c
    do
	[ -d "$PCP_LOG_DIR/pmie/$blob" ] && $sudo rm -rf "$PCP_LOG_DIR/pmie/$blob"
	[ -f "$PCP_ETC_DIR/pcp/pmie/control.d/$blob" ] && $sudo rm -f "$PCP_ETC_DIR/pcp/pmie/control.d/$blob"
    done
    if [ "$pmie_state" = off ]
    then
	_change_config pmie off
	_service pmie stop >>$seq_full 2>&1
    fi
}

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

localhost=`hostname`

_filter()
{
    tee -a $seq_full \
    | sed \
	-e '/^# created by pmiectl/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_LOG_DIR/;PCP_LOG_DIR/;g" \
	-e "s;$PCP_TMP_DIR/;PCP_TMP_DIR/;g" \
	-e "s;$PCP_TMPFILE_DIR/pmiectl\.[^/]*;PCP_TMPFILE_DIR/pmiectl.XXXXX;g" \
	-e "s;$PCP_ETC_DIR/;PCP_ETC_DIR/;g" \
	-e '/^Host:/{
s/Host: '$localhost' /Host: LOCALHOSTNAME /
s/[0-9.]*$/DATESTAMP/
}' \
    # end
}

# Build filter for any existing non-qa and non-primary pmie instances.
# The "pmcd Host" and "Class" fields from the pmiectl status output
# should suffice to uniquely identify each.
#
pmiectl 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
#
_filter_status()
{
    tee -a $seq_full \
    | $PCP_AWK_PROG -f $tmp.awk \
    | sed \
	-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 /" \
    | $PCP_AWK_PROG '
$2 ~ /^[0-9][0-9]*$/	{ $2 = "<nrule>" }
$3 ~ /^[0-9][0-9]*$/	{ $3 = "<neval>" }
$5 ~ /^[0-9][0-9]*$/	{ $5 = "<pid>" }
			{ print }' >$tmp.tmp
    head -1 $tmp.tmp
    sed -e '1d' $tmp.tmp | LC_COLLATE=POSIX sort
}

_filter_pmie()
{
    if [ ! -f "$1" ]
    then
	echo "Arrgh! log file $1 not found ..."
	ls -l `dirname "$1"`
	pmiectl -V status
	return
    fi
    echo "=== $1 ===" >>$seq_full
    cat "$1" \
    | tee -a $seq_full \
    | sed  \
	-e '/^Log for pmie on .* started /d' \
	-e 's/^[A-Za-z0-9 :]*: /DATESTAMP: /' \
	-e '/^DATESTAMP: PID = /d' \
	-e '/Unknown metric name/d' \
	-e '/not in namespace for pmcd/d' \
    # end
}

cat <<End-of-File >$tmp.policy.head
# Installed by PCP QA test $seq on `date`
[class]
$seq
[ident]
$seq-%h
[control]
\$version=1.1
# existing config file
%h n n PCP_LOG_DIR/pmie/%i/pmie.log -c $tmp.config
End-of-File

cat <<End-of-File >$tmp.config
delta = 0.1sec;
some_inst sample.lights > 0 -> print "The lights are on!";
End-of-File

# Need primary pmie running so pmiectl status output is deterministic
#
_get_config pmie >$tmp.tmp || _exit 1
pmie_state=`cat $tmp.tmp`
rm -f $tmp.tmp
[ "$pmie_state" = off ] && _change_config pmie on
if ! _service pmie start >>$seq_full 2>&1; then _exit 1; fi

# real QA test starts here
echo '== -NV expect pmfind class to be used' | tee -a $seq_full
pmiectl -NV cond-create localhost 2>&1 | _filter

echo | tee -a $seq_full
echo '== -NV -p, no [create] section, expect on instance to be created' | tee -a $seq_full
cp $tmp.policy.head $tmp.policy
pmiectl -NV -p $tmp.policy cond-create localhost 2>&1 | _filter

echo | tee -a $seq_full
echo '== -NV -p -c, no [create] section, expect no instance to be created' | tee -a $seq_full
pmiectl -NV -p $tmp.policy -c $seq cond-create localhost 2>&1 | _filter

echo "[create]" >>$tmp.policy.head

echo | tee -a $seq_full
echo '== -NV -p -c exists() false, expect no instance to be created' | tee -a $seq_full
cp $tmp.policy.head $tmp.policy
echo "exists(hinv.foo)" >>$tmp.policy
pmiectl -NV -p $tmp.policy -c $seq cond-create localhost 2>&1 | _filter

echo | tee -a $seq_full
echo '== -NV -p -c exists() true (leaf in PMNS), expect instance to be created' | tee -a $seq_full
cp $tmp.policy.head $tmp.policy
echo "exists(sample.bin)" >>$tmp.policy
pmiectl -NV -p $tmp.policy -c $seq cond-create localhost 2>&1 | _filter

echo | tee -a $seq_full
echo '== -NV -p -c exists() true (non-leaf in PMNS), expect instance to be created' | tee -a $seq_full
cp $tmp.policy.head $tmp.policy
echo "exists(sample)" >>$tmp.policy
pmiectl -NV -p $tmp.policy -c $seq cond-create localhost 2>&1 | _filter

echo | tee -a $seq_full
echo '== -NV -p -c values() false (bad metric), expect no instance to be created' | tee -a $seq_full
cp $tmp.policy.head $tmp.policy
echo "values(hinv.foo.bar)" >>$tmp.policy
pmiectl -NV -p $tmp.policy -c $seq cond-create localhost 2>&1 | _filter

echo | tee -a $seq_full
echo '== -NV -p -c values() false (numval < 1), expect no instance to be created' | tee -a $seq_full
cp $tmp.policy.head $tmp.policy
echo "values(sample.bad.novalues)" >>$tmp.policy
pmiectl -NV -p $tmp.policy -c $seq cond-create localhost 2>&1 | _filter

echo | tee -a $seq_full
echo '== -NV -p -c values() true (leaf & singular), expect instance to be created' | tee -a $seq_full
cp $tmp.policy.head $tmp.policy
echo "values(sample.long)" >>$tmp.policy
pmiectl -NV -p $tmp.policy -c $seq cond-create localhost 2>&1 | _filter

echo | tee -a $seq_full
echo '== -NV -p -c values() true (leaf & indom), expect instance to be created' | tee -a $seq_full
cp $tmp.policy.head $tmp.policy
echo "values(sample.bin)" >>$tmp.policy
pmiectl -NV -p $tmp.policy -c $seq cond-create localhost 2>&1 | _filter

echo | tee -a $seq_full
echo '== -NV -p -c values() true (non-leaf & indom), expect instance to be created' | tee -a $seq_full
cp $tmp.policy.head $tmp.policy
echo "values(disk.dev)" >>$tmp.policy
pmiectl -NV -p $tmp.policy -c $seq cond-create localhost 2>&1 | _filter

echo | tee -a $seq_full
echo '== -NV -p -c condition() false (bad expr), expect no instance to be created' | tee -a $seq_full
cp $tmp.policy.head $tmp.policy
echo "condition(hinv.ncpu >)" >>$tmp.policy
pmiectl -NV -p $tmp.policy -c $seq cond-create localhost 2>&1 | _filter

echo | tee -a $seq_full
echo '== -NV -p -c condition() false (singular value == 0), expect no instance to be created' | tee -a $seq_full
cp $tmp.policy.head $tmp.policy
echo "condition(hinv.ncpu < 1)" >>$tmp.policy
pmiectl -NV -p $tmp.policy -c $seq cond-create localhost 2>&1 | _filter

echo | tee -a $seq_full
echo '== -NV -p -c condition() false (indom value < 0), expect no instance to be created' | tee -a $seq_full
cp $tmp.policy.head $tmp.policy
echo "condition(-sample.bin)" >>$tmp.policy
pmiectl -NV -p $tmp.policy -c $seq cond-create localhost 2>&1 | _filter

echo | tee -a $seq_full
echo '== -NV -p -c condition() true (singular value > 0), expect instance to be created' | tee -a $seq_full
cp $tmp.policy.head $tmp.policy
echo "values(hinv.ndisk > 0 ? hinv.ndisk : 1 + hinv.ncpu > 0 ? hinv.ndisk : 1)" >>$tmp.policy
pmiectl -NV -p $tmp.policy -c $seq cond-create localhost 2>&1 | _filter

echo | tee -a $seq_full
echo '== -NV -p -c hostname() false, expect no instance to be created' | tee -a $seq_full
cp $tmp.policy.head $tmp.policy
echo "hostname(.*[fF][oO][oO].*)" >>$tmp.policy
pmiectl -NV -p $tmp.policy -c $seq cond-create localhost 2>&1 | _filter

echo | tee -a $seq_full
echo '== -NV -p -c hostname() true, expect instance to be created' | tee -a $seq_full
cp $tmp.policy.head $tmp.policy
echo "hostname((local|LOCAL)host)" >>$tmp.policy
pmiectl -NV -p $tmp.policy -c $seq cond-create localhost 2>&1 | _filter

# now use the installed class files, no -p or -c
#
$sudo cp $tmp.policy $PCP_ETC_DIR/pcp/pmie/class.d/$seq.1

echo | tee -a $seq_full
echo '== -NV, expect simple instance to be created' | tee -a $seq_full
pmiectl -NV cond-create localhost 2>&1 | _filter

cat <<End-of-File >$tmp.policy
# Installed by PCP QA test $seq on `date`
[class]
$seq.2
[ident]
$seq.2-%h
[control]
\$version=1.1
# same existing config file
%h n n PCP_LOG_DIR/pmie/%i/pmie.log -c $tmp.config
[create]
condition(1)
End-of-File
$sudo cp $tmp.policy $PCP_ETC_DIR/pcp/pmie/class.d/$seq.2

echo | tee -a $seq_full
echo '== -i, 2 explicit configs, expect concat config file for one pmfind instance' | tee -a $seq_full
$sudo pmiectl -i $seq cond-create localhost 2>&1 | _filter
pmiectl -V status 2>&1 | _filter_status
grep sample.lights $PCP_LOG_DIR/pmie/$seq/$seq.config
pmsleep 0.5		# give pmie a chance to warm up
_filter_pmie $PCP_LOG_DIR/pmie/$seq/pmie.log | sort | uniq
echo "--- start pmie config file ---" >>$seq_full
cat $PCP_LOG_DIR/pmie/$seq/$seq.config >>$seq_full
echo "--- end pmie config file ---" >>$seq_full

cat <<End-of-File >$tmp.policy
# Installed by PCP QA test $seq on `date`
[class]
$seq.3
[ident]
$seq.3-%h
[control]
\$version=1.1
# no config file @ start
%h n n PCP_LOG_DIR/pmie/%i/pmie.log -c ./%i.config
[create]
condition(hinv.ncpu > 0)
End-of-File
$sudo cp $tmp.policy $PCP_ETC_DIR/pcp/pmie/class.d/$seq.3

echo | tee -a $seq_full
echo '== -i, + logconf config, expect concat config file for one pmfind instance' | tee -a $seq_full
$sudo pmiectl -i $seq-a cond-create localhost 2>&1 | _filter
pmiectl -V status 2>&1 | _filter_status
for metric in sample.lights network.interface.total.bytes
do
    echo "check $metric ..."
    grep -E "$metric( |\$)" $PCP_LOG_DIR/pmie/$seq-a/$seq-a.config
done
pmsleep 0.5		# give pmie a chance to warm up
_filter_pmie $PCP_LOG_DIR/pmie/$seq-a/pmie.log | sort | uniq
echo "--- start pmie config file ---" >>$seq_full
cat $PCP_LOG_DIR/pmie/$seq-a/$seq-a.config >>$seq_full
echo "--- end pmie config file ---" >>$seq_full

$sudo cp $tmp.policy $PCP_ETC_DIR/pcp/pmie/class.d/$seq.2

echo | tee -a $seq_full
echo '== -i, 2x logconf config, expect concat config file for one pmfind instance' | tee -a $seq_full
$sudo pmiectl -i $seq-b cond-create localhost 2>&1 | _filter
pmiectl -V status 2>&1 | _filter_status
for metric in sample.lights network.interface.total.bytes
do
    echo "check $metric ..."
    grep -E "$metric( |\$)" $PCP_LOG_DIR/pmie/$seq-b/$seq-b.config
done
pmsleep 0.5		# give pmie a chance to warm up
_filter_pmie $PCP_LOG_DIR/pmie/$seq-b/pmie.log | sort | uniq
echo "--- start pmie config file ---" >>$seq_full
cat $PCP_LOG_DIR/pmie/$seq-b/$seq-b.config >>$seq_full
echo "--- end pmie config file ---" >>$seq_full

$sudo cp $tmp.policy $PCP_ETC_DIR/pcp/pmie/class.d/$seq.1

echo | tee -a $seq_full
echo '== -i, 3x logconf config, expect concat config file for one pmfind instance' | tee -a $seq_full
$sudo pmiectl -i $seq-c cond-create localhost 2>&1 | _filter
pmiectl -V status 2>&1 | _filter_status
for metric in sample.lights network.interface.total.bytes
do
    echo "check $metric ..."
    grep -E "$metric( |\$)" $PCP_LOG_DIR/pmie/$seq-c/$seq-c.config
done
pmsleep 0.5		# give pmie a chance to warm up
_filter_pmie $PCP_LOG_DIR/pmie/$seq-c/pmie.log | sort | uniq
echo "--- start pmie config file ---" >>$seq_full
cat $PCP_LOG_DIR/pmie/$seq-c/$seq-c.config >>$seq_full
echo "--- end pmie config file ---" >>$seq_full

status=0
exit