From 046c1a890292421b37f5f50a5749d0f7efcf8d76 Mon Sep 17 00:00:00 2001 From: Ernest Allen Date: Wed, 24 Oct 2018 17:25:46 -0400 Subject: [PATCH] DISPATCH-1147 Expose address priority to management and qdstat --- python/qpid_dispatch/management/qdrouter.json | 4 ++++ src/router_core/agent_address.c | 6 +++++ src/router_core/agent_address.h | 2 +- tests/system_tests_qdstat.py | 22 +++++++++++++++++++ tools/qdstat.in | 4 +++- 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/python/qpid_dispatch/management/qdrouter.json b/python/qpid_dispatch/management/qdrouter.json index 21bc4cfcb3..525757673b 100644 --- a/python/qpid_dispatch/management/qdrouter.json +++ b/python/qpid_dispatch/management/qdrouter.json @@ -1514,6 +1514,10 @@ "trackedDeliveries": { "type": "integer", "description": "Number of transit deliveries being tracked for this address (for balanced distribution)." + }, + "priority": { + "type": "integer", + "description": "The message priority being handled by this address." } } }, diff --git a/src/router_core/agent_address.c b/src/router_core/agent_address.c index c9f2ddee6c..8c01588ef5 100644 --- a/src/router_core/agent_address.c +++ b/src/router_core/agent_address.c @@ -39,6 +39,7 @@ #define QDR_ADDRESS_DELIVERIES_INGRESS_ROUTE_CONTAINER 16 #define QDR_ADDRESS_TRANSIT_OUTSTANDING 17 #define QDR_ADDRESS_TRACKED_DELIVERIES 18 +#define QDR_ADDRESS_PRIORITY 19 const char *qdr_address_columns[] = {"name", @@ -60,6 +61,7 @@ const char *qdr_address_columns[] = "deliveriesIngressRouteContainer", "transitOutstanding", "trackedDeliveries", + "priority", 0}; @@ -167,6 +169,10 @@ static void qdr_insert_address_columns_CT(qdr_core_t *core, qd_compose_insert_long(body, addr->tracked_deliveries); break; + case QDR_ADDRESS_PRIORITY: + qd_compose_insert_int(body, addr->priority); + break; + default: qd_compose_insert_null(body); break; diff --git a/src/router_core/agent_address.h b/src/router_core/agent_address.h index b326837f2a..58c0d91a8b 100644 --- a/src/router_core/agent_address.h +++ b/src/router_core/agent_address.h @@ -31,7 +31,7 @@ void qdra_address_get_CT(qdr_core_t *core, const char *qdr_address_columns[]); -#define QDR_ADDRESS_COLUMN_COUNT 19 +#define QDR_ADDRESS_COLUMN_COUNT 20 const char *qdr_address_columns[QDR_ADDRESS_COLUMN_COUNT + 1]; diff --git a/tests/system_tests_qdstat.py b/tests/system_tests_qdstat.py index 2bd89d72c2..aa32b41890 100644 --- a/tests/system_tests_qdstat.py +++ b/tests/system_tests_qdstat.py @@ -87,6 +87,28 @@ def test_address(self): parts = out.split("\n") self.assertEqual(len(parts), 8) + def test_address_priority(self): + out = self.run_qdstat(['--address']) + lines = out.split("\n") + + # make sure the output contains a header line + self.assertGreaterEqual(len(lines), 2) + + # see if the header line has the word priority in it + priorityregexp = r'priority' + priority_column = re.search(priorityregexp, lines[1]).start() + self.assertGreater(priority_column, -1) + + # extract the number in the priority column of every address + for i in range(3, len(lines) - 1): + pri = re.findall('\d+', lines[i][priority_column:]) + # make sure the priority found is a number + self.assertGreater(len(pri), 0, "Can not find numeric priority in '%s'" % lines[i]) + priority = int(pri[0]) + # make sure the priority is from -1 to 9 + self.assertGreaterEqual(priority, -1, "Priority was less than -1") + self.assertLessEqual(priority, 9, "Priority was greater than 9") + def test_address_with_limit(self): out = self.run_qdstat(['--address', '--limit=1']) parts = out.split("\n") diff --git a/tools/qdstat.in b/tools/qdstat.in index 471b3c1b2a..18281f16c1 100755 --- a/tools/qdstat.in +++ b/tools/qdstat.in @@ -413,10 +413,11 @@ class BusManager(Node): heads.append(Header("thru", Header.COMMAS)) heads.append(Header("to-proc", Header.COMMAS)) heads.append(Header("from-proc", Header.COMMAS)) + heads.append(Header("priority")) rows = [] cols = ('distribution', 'inProcess', 'subscriberCount', 'remoteCount', 'containerCount', 'deliveriesIngress', 'deliveriesEgress', - 'deliveriesTransit', 'deliveriesToContainer', 'deliveriesFromContainer', 'name') + 'deliveriesTransit', 'deliveriesToContainer', 'deliveriesFromContainer', 'name', 'priority') objects = self.query('org.apache.qpid.dispatch.router.address', cols, limit=self.opts.limit) @@ -435,6 +436,7 @@ class BusManager(Node): row.append(addr.deliveriesTransit) row.append(addr.deliveriesToContainer) row.append(addr.deliveriesFromContainer) + row.append(addr.priority) rows.append(row) title = "Router Addresses" sorter = Sorter(heads, rows, 'addr', 0, True)