diff --git a/deps/rabbitmq_management/priv/www/index.html b/deps/rabbitmq_management/priv/www/index.html index e1b8ed80c9..a3e3a98ba9 100644 --- a/deps/rabbitmq_management/priv/www/index.html +++ b/deps/rabbitmq_management/priv/www/index.html @@ -33,6 +33,7 @@
  • Queues
  • Users
  • Virtual Hosts
  • +
  • Policies
  • diff --git a/deps/rabbitmq_management/priv/www/js/dispatcher.js b/deps/rabbitmq_management/priv/www/js/dispatcher.js index 2bbeae2e3b..22e4d5da5c 100644 --- a/deps/rabbitmq_management/priv/www/js/dispatcher.js +++ b/deps/rabbitmq_management/priv/www/js/dispatcher.js @@ -153,6 +153,21 @@ dispatcher_add(function(sammy) { update(); return false; }); + path('#/policies', {'policies': '/parameters/policy'}, 'policies'); + sammy.get('#/policies/:id', function() { + render({'policy': '/parameters/policy/' + esc(this.params['id'])}, + 'policy', '#/policies'); + }); + sammy.put('#/policies', function() { + put_parameter(this, ['prefix'], []); + return false; + }); + sammy.del('#/policies', function() { + if (sync_delete(this, '/parameters/:component/:key')) + go_to('#/policies'); + return false; + }); + sammy.get('#/import-succeeded', function() { render({}, 'import-succeeded', '#/overview'); }); diff --git a/deps/rabbitmq_management/priv/www/js/formatters.js b/deps/rabbitmq_management/priv/www/js/formatters.js index 21c6dc7ed9..398537e510 100644 --- a/deps/rabbitmq_management/priv/www/js/formatters.js +++ b/deps/rabbitmq_management/priv/www/js/formatters.js @@ -210,6 +210,10 @@ function fmt_exchange_type(type) { ''; } +function fmt_policy(policy) { + return policy == 'none' ? '' : fmt_escape_html(policy); +} + function fmt_exchange_url(name) { return name == '' ? 'amq.default' : fmt_escape_html(name); } @@ -455,6 +459,10 @@ function link_node(name) { return _link_to(fmt_escape_html(name), '#/nodes/' + esc(name)) } +function link_policy(name) { + return _link_to(fmt_escape_html(name), '#/policies/' + esc(name)) +} + function _link_to(name, url) { return '' + name + ''; } diff --git a/deps/rabbitmq_management/priv/www/js/main.js b/deps/rabbitmq_management/priv/www/js/main.js index 936e3da7e2..7e125c43ae 100644 --- a/deps/rabbitmq_management/priv/www/js/main.js +++ b/deps/rabbitmq_management/priv/www/js/main.js @@ -692,6 +692,26 @@ function maybe_remove_fields(params) { return params; } +function put_parameter(sammy, mandatory_keys, num_keys) { + for (var i in sammy.params) { + if (i === 'length' || !sammy.params.hasOwnProperty(i)) continue; + if (sammy.params[i] == '' && mandatory_keys.indexOf(i) == -1) { + delete sammy.params[i]; + } + else if (num_keys.indexOf(i) != -1) { + sammy.params[i] = parseInt(sammy.params[i]); + } + } + var params = {"component": sammy.params.component, + "key": sammy.params.key, + "value": params_magic(sammy.params)}; + delete params.value.component; + delete params.value.key; + sammy.params = params; + if (sync_put(sammy, '/parameters/:component/:key')) update(); +} + + function debug(str) { $('

    ' + str + '

    ').appendTo('#debug'); } diff --git a/deps/rabbitmq_management/priv/www/js/tmpl/exchange.ejs b/deps/rabbitmq_management/priv/www/js/tmpl/exchange.ejs index 96a6fbae3a..961fb2c94f 100644 --- a/deps/rabbitmq_management/priv/www/js/tmpl/exchange.ejs +++ b/deps/rabbitmq_management/priv/www/js/tmpl/exchange.ejs @@ -12,6 +12,10 @@ Parameters <%= fmt_parameters(exchange) %> + + Policy + <%= fmt_policy(exchange.policy) %> + <% if (vhosts_interesting) { %> Virtual host diff --git a/deps/rabbitmq_management/priv/www/js/tmpl/exchanges.ejs b/deps/rabbitmq_management/priv/www/js/tmpl/exchanges.ejs index fbb3177c4f..1f4d60af05 100644 --- a/deps/rabbitmq_management/priv/www/js/tmpl/exchanges.ejs +++ b/deps/rabbitmq_management/priv/www/js/tmpl/exchanges.ejs @@ -11,6 +11,7 @@ <% } %> <%= fmt_sort('Name', 'name') %> <%= fmt_sort('Type', 'type') %> + <%= fmt_sort('Policy', 'policy') %> Parameters <% if (statistics_level == 'fine') { %> <%= fmt_sort('Message rate', 'message_stats_in.publish_details.rate') %> @@ -28,6 +29,7 @@ <% } %> <%= link_exchange(exchange.vhost, exchange.name) %> <%= fmt_exchange_type(exchange.type) %> + <%= fmt_policy(exchange.policy) %> <%= fmt_parameters_short(exchange) %> <%= fmt_rate(exchange.message_stats_in, 'publish', false) %> diff --git a/deps/rabbitmq_management/priv/www/js/tmpl/policies.ejs b/deps/rabbitmq_management/priv/www/js/tmpl/policies.ejs new file mode 100644 index 0000000000..802002c887 --- /dev/null +++ b/deps/rabbitmq_management/priv/www/js/tmpl/policies.ejs @@ -0,0 +1,59 @@ +

    Policies

    +
    +

    All policies

    +
    +
    + +<% if (policies.length > 0) { %> + + + + + + + + + + +<% + for (var i = 0; i < policies.length; i++) { + var policy = policies[i]; +%> + > + + + + + +<% } %> + +
    NameVirtual HostPrefixPolicy
    <%= link_policy(policy.key) %><%= policy.value['vhost'] %><%= policy.value['prefix'] %><%= fmt_table_short(policy.value['policy']) %>
    +<% } else { %> +

    ... no policies ...

    +<% } %> +
    +

    Add / update a policy

    +
    + + + + + + + + + + + + + + + + + + +
    *
    + +
    +
    +
    diff --git a/deps/rabbitmq_management/priv/www/js/tmpl/policy.ejs b/deps/rabbitmq_management/priv/www/js/tmpl/policy.ejs new file mode 100644 index 0000000000..023811f736 --- /dev/null +++ b/deps/rabbitmq_management/priv/www/js/tmpl/policy.ejs @@ -0,0 +1,32 @@ +

    Policy: <%= fmt_string(policy.key) %>

    + +
    +

    Overview

    +
    + + + + + + + + + + + + + +
    Virtual Host<%= policy.value.vhost %>
    Prefix<%= policy.value.prefix %>
    Policy<%= fmt_table_short(policy.value.policy) %>
    +
    +
    + +
    +

    Delete this policy

    +
    +
    + + + +
    +
    +
    diff --git a/deps/rabbitmq_management/priv/www/js/tmpl/queue.ejs b/deps/rabbitmq_management/priv/www/js/tmpl/queue.ejs index 7194f074aa..74e7fca0e4 100644 --- a/deps/rabbitmq_management/priv/www/js/tmpl/queue.ejs +++ b/deps/rabbitmq_management/priv/www/js/tmpl/queue.ejs @@ -16,6 +16,10 @@ Parameters <%= fmt_parameters(queue) %> + + Policy + <%= fmt_policy(queue.policy) %> + Exclusive owner @@ -26,13 +30,13 @@ <% } %> + + + -
    Status <%= fmt_idle_long(queue) %>
    - - diff --git a/deps/rabbitmq_management/priv/www/js/tmpl/queues.ejs b/deps/rabbitmq_management/priv/www/js/tmpl/queues.ejs index 0347c8fceb..a91ec89311 100644 --- a/deps/rabbitmq_management/priv/www/js/tmpl/queues.ejs +++ b/deps/rabbitmq_management/priv/www/js/tmpl/queues.ejs @@ -10,7 +10,7 @@
    Consumers <%= fmt_string(queue.consumers) %>
    - + <% if (statistics_level == 'fine') { %> @@ -26,6 +26,7 @@ <% } %> + @@ -62,9 +63,8 @@ <%= link_conn(queue.owner_pid_details.name) %> <% } %> - + + diff --git a/deps/rabbitmq_management/src/rabbit_mgmt_format.erl b/deps/rabbitmq_management/src/rabbit_mgmt_format.erl index a5b6407e02..a49e02bb61 100644 --- a/deps/rabbitmq_management/src/rabbit_mgmt_format.erl +++ b/deps/rabbitmq_management/src/rabbit_mgmt_format.erl @@ -265,14 +265,16 @@ queue(#amqqueue{name = Name, auto_delete = AutoDelete, exclusive_owner = ExclusiveOwner, arguments = Arguments, - pid = Pid }) -> + pid = Pid, + policy = Policy} = Q) -> format( [{name, Name}, {durable, Durable}, {auto_delete, AutoDelete}, {owner_pid, ExclusiveOwner}, {arguments, Arguments}, - {pid, Pid}], + {pid, Pid}, + {policy, rabbit_policy:name(Q)}], [{fun resource/1, [name]}, {fun amqp_table/1, [arguments]}]).
    OverviewOverview MessagesMessage rates<%= fmt_sort('Exclusive', 'owner_pid_details.name') %> Parameters<%= fmt_sort('Policy', 'policy') %> <%= fmt_sort('Status', 'idle_since') %> <%= fmt_sort('Ready', 'messages_ready') %> <%= fmt_sort('Unacked', 'messages_unacknowledged') %> - <%= fmt_parameters_short(queue) %> - <%= fmt_parameters_short(queue) %><%= fmt_policy(queue.policy) %> <%= fmt_idle(queue) %> <%= fmt_string(queue.messages_ready) %> <%= fmt_string(queue.messages_unacknowledged) %>