From 9778d9732ad5effc7e39133ca2b18f7d72368897 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Cogolu=C3=A8gnes?= Date: Thu, 9 Sep 2021 17:41:38 +0200 Subject: [PATCH] Display stream publishers in queue management page If the queue is a stream. WIP, currently all the stream publishers are listed, a new publishers per stream endpoint is required. References #3389 (cherry picked from commit 0038573f890ee266833ada8194629fbc9afc2c34) --- .../priv/www/js/dispatcher.js | 20 +++++++++++++++---- .../rabbitmq_management/priv/www/js/global.js | 3 +++ deps/rabbitmq_management/priv/www/js/main.js | 20 +++++++++++++++++-- .../priv/www/js/tmpl/queue.ejs | 3 +++ .../priv/www/js/stream.js | 16 ++++++++++++++- 5 files changed, 55 insertions(+), 7 deletions(-) diff --git a/deps/rabbitmq_management/priv/www/js/dispatcher.js b/deps/rabbitmq_management/priv/www/js/dispatcher.js index 5f1b54dbac8e..718808368b84 100644 --- a/deps/rabbitmq_management/priv/www/js/dispatcher.js +++ b/deps/rabbitmq_management/priv/www/js/dispatcher.js @@ -98,10 +98,22 @@ dispatcher_add(function(sammy) { }); sammy.get('#/queues/:vhost/:name', function() { - var path = '/queues/' + esc(this.params['vhost']) + '/' + esc(this.params['name']); - render({'queue': {path: path, - options: {ranges:['lengths-q', 'msg-rates-q', 'data-rates-q']}}, - 'bindings': path + '/bindings'}, 'queue', '#/queues'); + var vhost = this.params['vhost']; + var queue = this.params['name']; + var path = '/queues/' + esc(vhost) + '/' + esc(queue); + var requests = {'queue': {path: path, + options: {ranges:['lengths-q', 'msg-rates-q', 'data-rates-q']}}, + 'bindings': path + '/bindings'}; + // we add extra requests that can be added by code plugged on the extension point + for (var i = 0; i < QUEUE_EXTRA_CONTENT_REQUESTS.length; i++) { + var extra = QUEUE_EXTRA_CONTENT_REQUESTS[i](vhost, queue); + for (key in extra) { + if(extra.hasOwnProperty(key)){ + requests[key] = "/stream/publishers"; + } + } + } + render(requests, 'queue', '#/queues'); }); sammy.put('#/queues', function() { if (sync_put(this, '/queues/:vhost/:name')) diff --git a/deps/rabbitmq_management/priv/www/js/global.js b/deps/rabbitmq_management/priv/www/js/global.js index b930713acb08..b08cec3f2c44 100644 --- a/deps/rabbitmq_management/priv/www/js/global.js +++ b/deps/rabbitmq_management/priv/www/js/global.js @@ -168,6 +168,9 @@ var COLUMNS; var RENDER_CALLBACKS = {}; +const QUEUE_EXTRA_CONTENT = []; +const QUEUE_EXTRA_CONTENT_REQUESTS = []; + // All help ? popups var HELP = { 'delivery-limit': diff --git a/deps/rabbitmq_management/priv/www/js/main.js b/deps/rabbitmq_management/priv/www/js/main.js index 577f6fd71cbd..ffbf6e9a82b5 100644 --- a/deps/rabbitmq_management/priv/www/js/main.js +++ b/deps/rabbitmq_management/priv/www/js/main.js @@ -480,7 +480,9 @@ function with_update(fun) { if(outstanding_reqs.length > 0){ return false; } - with_reqs(apply_state(current_reqs), [], function(json) { + var model = []; + model['extra_content'] = []; // magic key for extension point + with_reqs(apply_state(current_reqs), model, function(json) { var html = format(current_template, json); fun(html); update_status('ok'); @@ -1116,7 +1118,13 @@ function with_reqs(reqs, acc, fun) { if (keys(reqs).length > 0) { var key = keys(reqs)[0]; with_req('GET', reqs[key], null, function(resp) { - acc[key] = JSON.parse(resp.responseText); + if (key.startsWith("extra_")) { + var extraContent = acc["extra_content"]; + extraContent[key] = JSON.parse(resp.responseText); + acc["extra_content"] = extraContent; + } else { + acc[key] = JSON.parse(resp.responseText); + } var remainder = {}; for (var k in reqs) { if (k != key) remainder[k] = reqs[k]; @@ -1152,6 +1160,14 @@ function format(template, json) { } } +function maybe_format_extra_queue_content(queue, extraContent) { + var content = ''; + for (var i = 0; i < QUEUE_EXTRA_CONTENT.length; i++) { + content += QUEUE_EXTRA_CONTENT[i](queue, extraContent); + } + return content; +} + function update_status(status) { var text; if (status == 'ok') diff --git a/deps/rabbitmq_management/priv/www/js/tmpl/queue.ejs b/deps/rabbitmq_management/priv/www/js/tmpl/queue.ejs index b7fba2f0c7fe..cf5afe508e78 100644 --- a/deps/rabbitmq_management/priv/www/js/tmpl/queue.ejs +++ b/deps/rabbitmq_management/priv/www/js/tmpl/queue.ejs @@ -267,6 +267,9 @@ <% } %> +<% if(!disable_stats) { %> +<%= maybe_format_extra_queue_content(queue, extra_content) %> +<% } %> <% if(!disable_stats) { %>
diff --git a/deps/rabbitmq_stream_management/priv/www/js/stream.js b/deps/rabbitmq_stream_management/priv/www/js/stream.js index 46878b7c6b9e..0179f019f9a6 100644 --- a/deps/rabbitmq_stream_management/priv/www/js/stream.js +++ b/deps/rabbitmq_stream_management/priv/www/js/stream.js @@ -61,4 +61,18 @@ CONSUMER_OWNER_FORMATTERS.push({ } }); -CONSUMER_OWNER_FORMATTERS.sort(CONSUMER_OWNER_FORMATTERS_COMPARATOR); \ No newline at end of file +CONSUMER_OWNER_FORMATTERS.sort(CONSUMER_OWNER_FORMATTERS_COMPARATOR); + +QUEUE_EXTRA_CONTENT_REQUESTS.push(function(vhost, queue) { + return {'extra_stream_publishers' : '/stream/publishers'}; +}); + +QUEUE_EXTRA_CONTENT.push(function(queue, extraContent) { + if (is_stream(queue)) { + return '

Stream publishers

' + + format('streamPublishersList', {'publishers': extraContent['extra_stream_publishers']}) + + '
'; + } else { + return ''; + } +}); \ No newline at end of file