Merge "Display queue sizes along with queues"

This commit is contained in:
Zuul 2020-11-10 20:40:05 +00:00 committed by Gerrit Code Review
commit b80f032d1a
2 changed files with 31 additions and 24 deletions

View File

@ -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})

View File

@ -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):