Display queue sizes along with queues
When checking queues, display not only queue names but also their size (number of messages). Return sizes as integers. Also update parsing to account for a rabbitmqctl output change in focal. Closes-Bug: #1838964 Change-Id: I2014f065393a1ad4b594363ade6c01ccec4fb71a
This commit is contained in:
parent
33af068075
commit
b3710a0085
|
@ -96,19 +96,19 @@ def check_queues(args):
|
|||
Return those queues to the user."""
|
||||
queue_depth = (action_get('queue-depth'))
|
||||
vhost = (action_get('vhost'))
|
||||
result = []
|
||||
# rabbitmqctl's output contains lines we don't want, such as
|
||||
# 'Listing queues ..' and '...done.', which may vary by release.
|
||||
# Actual queue results *should* always look like 'test\t0'
|
||||
queue_pattern = re.compile('.*\t[0-9]*')
|
||||
queue_pattern = re.compile(r"^(.*)\t([0-9]+$)")
|
||||
try:
|
||||
queues = check_output(['rabbitmqctl', 'list_queues',
|
||||
'-p', vhost]).decode('utf-8').split('\n')
|
||||
result = list({queue: size for (queue, size) in
|
||||
[i.split('\t') for i in queues
|
||||
if re.search(queue_pattern, i)]
|
||||
if int(size) >= queue_depth})
|
||||
|
||||
queue_lines = check_output(
|
||||
['rabbitmqctl', 'list_queues', '-q', '-p', vhost]
|
||||
).decode('utf-8').splitlines()
|
||||
filtered = filter(
|
||||
None, # filter out empty records
|
||||
map(lambda line: queue_pattern.findall(line), queue_lines))
|
||||
queues = [(queue, int(size)) for [[queue, size]] in filtered]
|
||||
result = {queue: size for queue, size in queues if size >= queue_depth}
|
||||
action_set({'output': result, 'outcome': 'Success'})
|
||||
except CalledProcessError as e:
|
||||
action_set({'output': e.output})
|
||||
|
|
|
@ -78,7 +78,10 @@ class ClusterStatusTestCase(CharmTestCase):
|
|||
|
||||
|
||||
class CheckQueuesTestCase(CharmTestCase):
|
||||
TEST_QUEUE_RESULT = b'Listing queues ...\ntest\t0\ntest\t0\n""'
|
||||
TEST_QUEUE_RESULTS = [
|
||||
b'Listing queues ...\ntest\t0\ntest\t0\n',
|
||||
b'name\tmessage\ntest\t0\ntest\t0\n',
|
||||
]
|
||||
|
||||
def dummy_action_get(self, key):
|
||||
action_values = {"queue-depth": -1, "vhost": "/"}
|
||||
|
@ -91,24 +94,28 @@ class CheckQueuesTestCase(CharmTestCase):
|
|||
|
||||
def test_check_queues(self):
|
||||
self.action_get.side_effect = self.dummy_action_get
|
||||
self.check_output.return_value = self.TEST_QUEUE_RESULT
|
||||
|
||||
actions.check_queues([])
|
||||
self.check_output.assert_called_once_with(['rabbitmqctl',
|
||||
'list_queues',
|
||||
'-p', "/"])
|
||||
self.action_set.assert_called()
|
||||
for queue_res in self.TEST_QUEUE_RESULTS:
|
||||
with self.subTest(queue_res=queue_res):
|
||||
self.check_output.return_value = queue_res
|
||||
actions.check_queues([])
|
||||
self.check_output.assert_called_once_with(
|
||||
['rabbitmqctl', 'list_queues', '-q', '-p', '/'],
|
||||
)
|
||||
self.check_output.reset_mock()
|
||||
self.action_set.assert_called_once_with(
|
||||
{'outcome': 'Success', 'output': {'test': 0}}
|
||||
)
|
||||
self.action_set.reset_mock()
|
||||
|
||||
def test_check_queues_execption(self):
|
||||
self.action_get.side_effect = self.dummy_action_get
|
||||
self.check_output.return_value = self.TEST_QUEUE_RESULT
|
||||
|
||||
self.check_output.side_effect = actions.CalledProcessError(1,
|
||||
"Failure")
|
||||
self.check_output.side_effect = actions.CalledProcessError(
|
||||
1, "Failure"
|
||||
)
|
||||
actions.check_queues([])
|
||||
self.check_output.assert_called_once_with(['rabbitmqctl',
|
||||
'list_queues',
|
||||
'-p', '/'])
|
||||
self.check_output.assert_called_once_with(
|
||||
['rabbitmqctl', 'list_queues', '-q', '-p', '/']
|
||||
)
|
||||
|
||||
|
||||
class ListUnconsumedQueuesTestCase(CharmTestCase):
|
||||
|
|
Loading…
Reference in New Issue