system-config/testinfra/test_graphite.py
Ian Wienand 6cd7433086 graphite: fix xFilesFactor
When we migrated this to ansible I missed that we didn't bring across
the storage-aggregation.conf file.

This has had the unfortunate effect of regressing the xFilesFactor set
for every newly created graphite stat since the migration.  This
setting is a percentage (0-1 float) of how much of a "bucket" needs to
be non-null to keep the value when rolling up changes.  We want this
to be zero due to the sporadic nature of data (see the original change
I5f416e798e7abedfde776c9571b6fc8cea5f3a33).

This only affected newly created statistics, as graphite doesn't
modify this setting once it creates the whisper file.  This probably
helped us overlook this for so long, as longer-existing stats were
operating correctly, but newer were dropping data when zoomed out.

Restore this setting, and double-check it in testinfra for the future.
For simplicity and to get this back to the prior state I will manually
update the on-disk .wsp files to this when this change applies.

Change-Id: I57873403c4ca9783b1851ba83bfba038f4b90715
2022-06-28 18:41:17 +10:00

74 lines
2.5 KiB
Python

# Copyright 2020 Red Hat, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import json
import logging
import ssl
import urllib.request
testinfra_hosts = ['graphite02.opendev.org']
def test_graphite_container_web_listening(host):
graphite_http = host.socket("tcp://127.0.0.1:80")
assert graphite_http.is_listening
graphite_https = host.socket("tcp://127.0.0.1:443")
assert graphite_https.is_listening
def test_graphite(host):
cmd = host.run('curl --insecure '
'--resolve graphite.opendev.org:443:127.0.0.1 '
'https://graphite.opendev.org')
assert '<title>Graphite Browser</title>' in cmd.stdout
def test_graphite_data(host):
# seed some data; send it over ipv6
cmd = ('timeout 20 bash -c '
'\'while true; do echo -n "example:$((RANDOM % 100))|c" '
'| nc -6 -w 1 -u localhost 8125; done\'')
host.run(cmd)
url='render?from=-10mins&until=now&target=stats.example&format=json'
# Assert we see some non-null values for this stat
# multi-node-hosts-file has setup graphite02.opendev.org to
# resolve from hosts.
found_value = False
with urllib.request.urlopen('https://graphite02.opendev.org/%s' % (url),
context=ssl._create_unverified_context()) \
as req:
data = json.loads(req.read().decode())
logging.debug('got: %s' % data)
datapoints = (data[0]['datapoints'])
for p in datapoints:
if p[0] != None:
found_value = True
assert found_value
def test_graphite_wsp(host):
# seed some timer data
cmd = ('timeout 20 bash -c '
'\'while true; do echo -n "example:$((RANDOM % 1000))|ms" '
'| nc -6 -w 1 -u localhost 8125; done\'')
host.run(cmd)
wsp_file = '/opt/graphite/storage/whisper/stats/timers/example/mean.wsp'
wsp = host.file(wsp_file)
assert wsp.exists
cmd = host.run('whisper-info %s' % wsp_file)
assert 'xFilesFactor: 0.0' in cmd.stdout