File: 1626

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 (179 lines) | stat: -rwxr-xr-x 5,465 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
#!/bin/sh
# PCP QA Test No. 1626
# pmproxy metrics
#
# Copyright (c) 2021-2022 Red Hat.
#

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

# get standard environment, filters and checks
. ./common.product
. ./common.filter
. ./common.check

_check_key_server
which curl >/dev/null 2>&1 || _notrun needs curl

_cleanup()
{
    cd $here
    echo "=== pmproxy.log ===" >>$seq_full
    cat $PCP_LOG_DIR/pmproxy/pmproxy.log >>$seq_full
    _restore_config $PCP_SYSCONF_DIR/pmproxy/pmproxy.options
    if $pmproxy_was_running
    then
	echo "Restart pmproxy ..." >>$seq_full
	_service pmproxy restart >>$seq_full 2>&1
	_wait_for_pmproxy
    else
	echo "Stopping pmproxy ..." >>$seq_full
	_service pmproxy stop >>$seq_full 2>&1
	_wait_pmproxy_end
    fi
    $sudo rm -rf $tmp $tmp.*
}

_pmproxy_mainpid()
{
    $PCP_PS_PROG $PCP_PS_ALL_FLAGS | \
    $PCP_AWK_PROG '$8 ~ "'$PCP_BINADM_DIR'/pmproxy" {print $2}'
}

_probe_val()
{
    pminfo -f $1 >$tmp.probe_val 2>&1
    [ $? -ne 0 ] && echo pminfo $1 FAILED, result `cat $tmp.probe_val` && exit
    awk '/value/ {print $NF}' $tmp.probe_val
    rm -f $tmp.probe_val
}

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

pmproxy_was_running=false
[ -f $PCP_RUN_DIR/pmproxy.pid ] && pmproxy_was_running=true
echo "pmproxy_was_running=$pmproxy_was_running" >>$seq_full

# Need to make sure -A is not included in the pmproxy options
#
_save_config $PCP_SYSCONF_DIR/pmproxy/pmproxy.options
echo "# Installed by PCP QA test $seq on `date`" >$tmp.options
sed <$PCP_SYSCONF_DIR/pmproxy/pmproxy.options >>$tmp.options \
    -e '/-A/s/^/#/' \
# end
$sudo cp $tmp.options $PCP_SYSCONF_DIR/pmproxy/pmproxy.options

# real QA test starts here
status=0

# need a fresh pmproxy service
if ! _service pmproxy stop >/dev/null 2>&1; then _exit 1; fi
_wait_pmproxy_end || _exit 1
if ! _service pmproxy start 2>&1; then _exit 1; fi | _filter_pmproxy_start
_wait_for_pmproxy || _exit 1

echo == wait for pmproxy server metrics
_wait_for_pmproxy_metrics || exit

echo === check pmproxy.pid
val=`_probe_val pmproxy.pid`
pid=`_pmproxy_mainpid`
if [ "$pid" -eq "$val" ]; then :; else echo FAIL pid=$pid val=$val && exit; fi

echo === check initial pmproxy.map metrics
for m in instance label metric context; do
    [ `_probe_val pmproxy.map.$m.size` -eq 0 ] && continue
    echo FAILED pmproxy.map.$m.size expected to be zero && exit
done

echo "=== start the metrics timer with a /metrics RESTAPI call"
val=`curl -Gs 'http://localhost:44322/metrics?names=pmproxy.pid' |\
     $PCP_AWK_PROG '/^pmproxy_pid/ {print $NF}'`
[ "$pid" -ne "$val" ] && echo FAIL RESTAPI fetch for pmproxy.pid && exit

echo "=== wait for the maps to be updated"
count=0
while true; do
    sz=`_probe_val pmproxy.map.metric.size`
    [ "$sz" -gt 0 ] && break
    count=`expr $count + 1`
    if [ $count -gt 20 ]
    then
	echo FAILED sz=\"$sz\" after $count iterations
	pminfo -f pmproxy >>$seq_full
	$PCP_PS_PROG $PCP_PS_ALL_FLAGS | grep -E '[P]PID|/[p]mproxy( |$)' >>$seq_full
	pminfo -f pmcd.agent.status >>$seq_full
	exit
    fi
    sleep 1
done
echo "namespace metrics found after $count iterations" >>$seq_full

echo === pmproxy.map size metrics should now be nonzero
for m in instance label metric context; do
    sz=`_probe_val pmproxy.map.$m.size`
    [ "$sz" -gt 0 ] && continue
    echo FAILED pmproxy.map.$m.size is \"$sz\" but expected to be non-zero
    exit
done

echo === check pmproxy cpu counters
total=`_probe_val pmproxy.cpu.total`
user=`_probe_val pmproxy.cpu.user`
sys=`_probe_val pmproxy.cpu.sys`
[ "$user" -eq 0 ] && echo FAIL pmproxy.cpu.user is zero
[ "$sys" -eq 0 ] && echo FAIL pmproxy.cpu.sys is zero
[ "$total" -eq 0 ] && echo FAIL pmproxy.cpu.total is zero

echo "=== wait for the discovery metrics to appear"
count=0
while true; do
    partial=`_probe_val pmproxy.discover.metadata.partial_reads`
    [ "$partial" = 0 ] && break
    count=`expr $count + 1`
    if [ $count -gt 20 ]
    then
	echo FAILED partial=\"$partial\" after $count iterations
	pminfo -f pmproxy >>$seq_full
	$PCP_PS_PROG $PCP_PS_ALL_FLAGS | grep -E '[P]PID|/[p]mproxy( |$)' >>$seq_full
	pminfo -f pmcd.agent.status >>$seq_full
	exit
    fi
    pmstore pmproxy.control.reload 1 >>$seq_full 2>&1
    sleep 1
done
echo "discovery metrics found after $count iterations" >>$seq_full

echo === check for discovery partial metadata reads
partial=`_probe_val pmproxy.discover.metadata.partial_reads`
if [ "$partial" != 0 ]
then
    echo FAIL \"$partial\" partial reads, should be zero
    pminfo -f pmproxy >>$seq_full
    $PCP_PS_PROG $PCP_PS_ALL_FLAGS | grep -E '[P]PID|/[p]mproxy( |$)' >>$seq_full
    pminfo -f pmcd.agent.status >>$seq_full
    exit
fi

echo === check maxrss and datasz values
for m in maxrss datasz; do
    val=`_probe_val pmproxy.mem.$m`
    [ "$val" -gt 0 ] && continue
    echo FAIL pmproxy.mem.$m is \"$val\", should be non-zero && exit
done

echo === check maxrss doesnt grow after 100 basic restapi requests
start_maxrss=`_probe_val pmproxy.mem.maxrss`
for n in `seq 1 100`; do
    curl -Gs 'http://localhost:44322/metrics?names=kernel.all.load' >/dev/null 2>&1
done
finish_maxrss=`_probe_val pmproxy.mem.maxrss`
growth=`expr $finish_maxrss - $start_maxrss`
[ $growth -gt 0 ] && echo start=$start_maxrss finish=$finish_maxrss, growth=$growth >>$seq_full
_within_tolerance "maxrss growth after 100 /metrics calls" $finish_maxrss $start_maxrss 50% -v

# sleep to avoid systemd StartLimitIntervalSec limits
sleep 4
exit