File: 1883

package info (click to toggle)
pcp 7.1.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 253,896 kB
  • sloc: ansic: 1,488,097; sh: 185,322; xml: 160,462; cpp: 83,813; python: 25,576; perl: 18,365; yacc: 6,877; lex: 2,864; makefile: 2,759; exp: 250; awk: 165; fortran: 60; java: 22
file content (139 lines) | stat: -rwxr-xr-x 4,581 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
#!/bin/sh
# PCP QA Test No. 1883
# Verify valkey PMDA metrics values and data types
#
# Copyright (c) 2026 Red Hat.  All Rights Reserved.
#

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

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

_check_key_server_version_offline

_cleanup()
{
    [ -n "$valkey_port" ] && $keys_cli -p $valkey_port shutdown
    cd $here
    _cleanup_pmda valkey
    $sudo rm -rf $tmp $tmp.*
}

status=1	# failure is the default!
$sudo rm -rf $tmp $tmp.* $seq.full
trap "_cleanup; exit \$status" 0 1 2 3 15

_filter_info()
{
    sed \
	-e "s/$valkey_port/VALKEY_PORT/g" \
	-e '/^$/d' \
	-e 's/value [0-9][0-9]*\.[0-9]*/value NUMBER/g' \
	-e 's/value [0-9][0-9]*/value NUMBER/g' \
	-e 's/value \"[^"]*\"/value STRING/g' \
	-e 's/ [0-9][0-9]*$/ NUMBER/g' \
    #end
}

# real QA test starts here
pmda_path="$PCP_PMDAS_DIR/valkey"
pmda_script="$pmda_path/Install"

# Start a local valkey server for testing
echo "Starting local valkey server ..."
valkey_port=`_find_free_port`
$key_server --port $valkey_port --save "" > $tmp.valkey 2>&1 &
_wait_for_key_server $valkey_port

# Do some operations to generate stats
$keys_cli -p $valkey_port set testkey testvalue > /dev/null
$keys_cli -p $valkey_port get testkey > /dev/null
$keys_cli -p $valkey_port get nonexistent > /dev/null
$keys_cli -p $valkey_port del testkey > /dev/null

# Configure the PMDA to use our test valkey server
$sudo rm -f $pmda_path/valkey.conf
$sudo sh -c "echo 'host=127.0.0.1' > $pmda_path/valkey.conf"
$sudo sh -c "echo 'port=$valkey_port' >> $pmda_path/valkey.conf"

echo "== Installing valkey PMDA =="
_prepare_pmda valkey
cd $PCP_PMDAS_DIR/valkey
$sudo ./Install </dev/null >$tmp.out 2>&1
cat $tmp.out >>$seq_full
cd $here

echo
echo "== Verify metric data types and semantics =="
pminfo -dtT valkey.server.uptime_seconds
pminfo -dtT valkey.server.process_id
pminfo -dtT valkey.server.valkey_version
pminfo -dtT valkey.clients.connected
pminfo -dtT valkey.clients.maxclients
pminfo -dtT valkey.memory.used
pminfo -dtT valkey.memory.fragmentation_ratio
pminfo -dtT valkey.memory.maxmemory_policy
pminfo -dtT valkey.stats.total_commands
pminfo -dtT valkey.stats.keyspace_hits
pminfo -dtT valkey.stats.instantaneous_input_kbps
pminfo -dtT valkey.cpu.user
pminfo -dtT valkey.cpu.system_main_thread
pminfo -dtT valkey.persistence.rdb_last_save_time
pminfo -dtT valkey.persistence.rdb_saves
pminfo -dtT valkey.replication.role
pminfo -dtT valkey.eventloop.cycles

echo
echo "== Check that metrics return reasonable values =="
# Server metrics should be positive
pmprobe -v valkey.server.uptime_seconds | awk '{if ($3 > 0) print "uptime_seconds: OK"; else print "uptime_seconds: FAIL"}'
pmprobe -v valkey.server.process_id | awk '{if ($3 > 0) print "process_id: OK"; else print "process_id: FAIL"}'

# Client metrics (at least 1 connected for valkey-cli)
pmprobe -v valkey.clients.connected | awk '{if ($3 >= 0) print "connected_clients: OK"; else print "connected_clients: FAIL"}'

# Memory metrics should be positive
pmprobe -v valkey.memory.used | awk '{if ($3 > 0) print "used_memory: OK"; else print "used_memory: FAIL"}'

# Stats should reflect our operations
pmprobe -v valkey.stats.total_commands | awk '{if ($3 >= 4) print "total_commands: OK (got commands)"; else print "total_commands: value="$3}'
pmprobe -v valkey.stats.keyspace_hits | awk '{if ($3 >= 1) print "keyspace_hits: OK (got hit)"; else print "keyspace_hits: value="$3}'
pmprobe -v valkey.stats.keyspace_misses | awk '{if ($3 >= 1) print "keyspace_misses: OK (got miss)"; else print "keyspace_misses: value="$3}'

echo
echo "== Test metric value caching =="
# Fetch twice in quick succession - should use cache
pmprobe -v valkey.stats.total_commands > $tmp.fetch1
sleep 0.1
pmprobe -v valkey.stats.total_commands > $tmp.fetch2
if diff $tmp.fetch1 $tmp.fetch2 > /dev/null; then
    echo "Metric caching: OK"
else
    echo "Metric caching: values differ (cache may not be working)"
fi

echo
echo "== Verify metrics update after cache timeout =="
sleep 3  # Wait for cache to expire (VALKEY_CACHE_TIMEOUT is 2 seconds)
$keys_cli -p $valkey_port set anotherkey anothervalue > /dev/null
$keys_cli -p $valkey_port get anotherkey > /dev/null
sleep 0.5
pmprobe -v valkey.stats.total_commands > $tmp.fetch3
if diff $tmp.fetch1 $tmp.fetch3 > /dev/null; then
    echo "Metrics NOT updating: FAIL"
else
    echo "Metrics updating: OK"
fi

echo
echo "== Restoring valkey PMDA =="
# done via _cleanup_pmda() in _cleanup()

# success, all done
status=0
exit