summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Cogoluègnes <acogoluegnes@gmail.com>2021-09-09 17:41:38 +0200
committerArnaud Cogoluègnes <acogoluegnes@gmail.com>2021-09-09 17:41:38 +0200
commit0038573f890ee266833ada8194629fbc9afc2c34 (patch)
treecb195fcff6d3eff735db82ae4bf2d072b47be3cf
parent8cc9806f07095ea8d0edadd18db5959407eb8993 (diff)
downloadrabbitmq-server-git-0038573f890ee266833ada8194629fbc9afc2c34.tar.gz
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
-rw-r--r--deps/rabbitmq_management/priv/www/js/dispatcher.js20
-rw-r--r--deps/rabbitmq_management/priv/www/js/global.js3
-rw-r--r--deps/rabbitmq_management/priv/www/js/main.js20
-rw-r--r--deps/rabbitmq_management/priv/www/js/tmpl/queue.ejs3
-rw-r--r--deps/rabbitmq_stream_management/priv/www/js/stream.js16
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 5f1b54dbac..718808368b 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 b930713acb..b08cec3f2c 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 577f6fd71c..ffbf6e9a82 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 b7fba2f0c7..cf5afe508e 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) { %>
<div class="section-hidden">
diff --git a/deps/rabbitmq_stream_management/priv/www/js/stream.js b/deps/rabbitmq_stream_management/priv/www/js/stream.js
index 46878b7c6b..0179f019f9 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 '<div class="section"><h2>Stream publishers</h2><div class="hider updatable">' +
+ format('streamPublishersList', {'publishers': extraContent['extra_stream_publishers']}) +
+ '</div></div>';
+ } else {
+ return '';
+ }
+}); \ No newline at end of file