Merge branch 'stable'

Conflicts:
	priv/www/css/main.css
	priv/www/js/main.js
This commit is contained in:
Michael Klishin 2017-10-27 07:15:02 +03:00
commit 2b94e510cf
16 changed files with 11514 additions and 9997 deletions

View File

@ -1,40 +1,50 @@
body { font: 12px Verdana, sans-serif; color: #484848; padding: 8px 35px; }
body { font: 12px Verdana, sans-serif; color: #484848; padding: 0; margin: 0; }
input, button, a.button { font: 12px Verdana, sans-serif; }
a { font-weight: bold; color: #444; text-decoration: none; }
a:hover { color: #F60; }
#outer { padding: 0 0 1em 0; width: 95%; margin: auto; }
#login table { margin: auto; }
#login p { text-align: center; }
#logo { margin-bottom: 20px; padding-top: 10px; }
#logo img { margin: 0 0 -0.3em 1em; border: none; }
#logo a { color: #768781; font-weight: bold; text-decoration: none; padding: 0 1em 0 0; }
#logo a:hover { text-decoration: underline; }
#logo { padding: 0 0 2em 0; }
#logo img { margin: 1em 0 -0.3em 1em; border: none; }
#login-version { float: right; color: #444; }
#login-version form { float: right; display: block; margin-left: 10px; }
#login-details { float: left; }
#login-details p { padding: 0 0 0.2em 0; margin: 0; text-align: right; }
#login-details a { color: #F60; text-decoration: none; }
#login-details a:hover { text-decoration: underline; }
#menu ul { float: left; padding: 0; margin: 0; }
#versions abbr { background: #f0f0f0; margin: 0 0 0 1em; }
.status-ok { }
.status-error { color: #F00; }
.status-timeout { color: #99EBFF; }
#debug { position: fixed; bottom: 0; z-index: 9; width: 100%; text-align: center; padding: 0; margin: 0; }
#debug p { background: #F60; color: white; margin: 0; padding: 1em; font-size: 2em; }
#header { background: white; position: fixed; z-index: 1; width: 95%; margin: auto; padding: 1em 0 0 0; border-bottom: 1px solid #666; }
#topnav { float: right; padding: 0; margin: 0; list-style-type: none; }
#topnav form { display: inline; }
#topnav input[type=submit] { padding: 3px 7px; display: inline; }
#topnav li { text-align: right; padding: 2px 0; }
#menu ul { padding: 0; margin: 0; overflow: auto; }
#menu li { float: left; list-style-type: none; padding: 0 0.1em 0 0; }
#menu li a { display: block; padding: 0.7em 1.3em; }
#menu { border-bottom: 1px solid #FF8C00; overflow: auto; width: 100%; }
#menu a { color: #444; font-weight: bold; text-decoration: none; padding: 5px; }
#menu a:hover { background-color: #444; color: white; -moz-border-radius: 8px 8px 0 0; border-radius: 8px 8px 0 0; }
#menu a.selected { background-color: #F60; color: white; -moz-border-radius: 8px 8px 0 0; border-radius: 8px 8px 0 0; }
a { color: #F60; text-decoration: none; }
a:hover { text-decoration: underline; }
#menu li a { display: block; padding: 0.7em 1.3em; margin-right: 5px; }
#menu a:hover { background-color: #F60; color: white; -moz-border-radius: 8px 8px 0 0; border-radius: 8px 8px 0 0; }
#menu a.selected { background-color: #666; color: white; -moz-border-radius: 8px 8px 0 0; border-radius: 8px 8px 0 0; }
#vhost-form { float: right; padding: 0; margin: 0; }
#main { padding-top: 10em; }
#main.with-rhs { margin-right: 210px; }
#rhs { float: right; width: 200px; background-color: white; position: relative; }
#rhs ul { padding: 0; margin: 0; }
#rhs li { list-style-type: none; padding: 0; margin: 0.1em 0; }
#rhs a { display: block; padding: 0.7em; color: #444; font-weight: bold; text-decoration: none; }
#rhs a:hover { background-color: #444; color: white; -moz-border-radius: 8px 0 0 8px; border-radius: 8px 0 0 8px; }
#rhs a.selected { background-color: #F60; color: white; -moz-border-radius: 8px 0 0 8px; border-radius: 8px 0 0 8px; }
#rhs { float: right; width: 200px; background-color: white; position: relative; padding-top: 10em; }
#rhs ul { padding: 0; margin: 10px 0 0 0; }
#rhs li { list-style-type: none; padding: 0; margin-bottom: 5px; }
#rhs a { display: block; padding: 0.7em; font-weight: bold; text-decoration: none; }
#rhs a:hover { background-color: #F60; color: white; -moz-border-radius: 8px 0 0 8px; border-radius: 8px 0 0 8px; }
#rhs a.selected { background-color: #666; color: white; -moz-border-radius: 8px 0 0 8px; border-radius: 8px 0 0 8px; }
h1 { font-size: 2em; font-weight: normal; padding: 0; }
h1 { font-size: 2em; font-weight: normal; padding: 0; margin-bottom: 0; }
b, dt { color: black; font-weight: normal; }
dd { margin-bottom: 5px; }
div.box, div.section, div.section-hidden { overflow: auto; width: 100%; }
@ -47,12 +57,12 @@ div.box, div.section, div.section-hidden { overflow: auto; width: 100%; }
.help:after { content: '?'; }
.help,
.popup-options-link { color: #484848; background-color: #E4E4E4; border: 1px solid #E4E4E4; padding: 2px 4px; cursor: pointer; }
.popup-options-link { background-color: #E4E4E4; padding: 2px 4px; cursor: pointer; }
table th .help,
table th .popup-options-link { border: none; }
.help:hover:hover,
.help:hover,
.popup-options-link:hover,
.popup-owner { background-color: #444; color: white; }
.popup-owner { background-color: #F60; color: white; }
.rate-visibility-option { cursor: pointer; padding: 4px; background: #fafafa; border: 1px solid #f0f0f0; border-radius: 3px; display:block; }
.rate-visibility-option:hover { background: #ddf;
@ -67,8 +77,8 @@ table.legend { float: left; }
table.legend th { padding: 4px 10px 4px 0; width: 80px; }
table.legend td { padding: 4px 0 4px 10px; width: 130px; }
.tag-link, .argument-link { color: #444; cursor: pointer; }
.tag-link:hover, .argument-link:hover { color: #888; }
.tag-link, .argument-link { color: #444; cursor: pointer; font-weight: bold; }
.tag-link:hover, .argument-link:hover { color: #F60; }
.filter { overflow: auto; width: 100%; margin-bottom: 10px; }
.filter table { float: left; }
@ -90,7 +100,8 @@ table.list { border-width: 1px; margin-bottom: 1em; }
table.list th, table.list td { border: 1px solid #ccc; }
table.list th { text-align: left; }
table.list th.plus-minus { border: none; min-width: 2em; }
table.list td a { display: block; color: black; text-decoration: underline; }
table.list td a { display: block; color: black; text-decoration: none; font-weight: bold; }
table.list td a:hover { color: #F60; }
table.list th a.sort { display: block; width: 100%; cursor: pointer; color: black; font-weight: bold; }
table.list th a.sort .arrow { color: #F60; }
table.list td p { margin: 0; padding: 1px 0 0 0; }
@ -131,7 +142,7 @@ small { font-size: 0.8em; color: #888; }
#main sub a { color: #888; }
#main sub a:hover { color: #444; }
table.argument-links { color: #888; }
table.argument-links td { font-size: 0.64em; vertical-align: top; }
table.argument-links td { vertical-align: top; }
.unknown { color: #888; }
table.facts { float: left; }
@ -161,7 +172,7 @@ tr.alt2>td {
td span,
td abbr {
display: inline-block;
padding: 3px;
padding: 3px 5px;
margin: 0 0 3px 0;
}
@ -187,17 +198,14 @@ div.status-key-green { background: #98f898; }
.r { text-align: right !important; }
.t { vertical-align: top !important; }
p.status-ok { color: #888; text-align: right; }
p.status-error { background: #ff7a7a; color: white; margin-top: 50px !important; }
p.status-error th { background: white; }
p.warning, div.form-popup-warn { background: #ff8; }
div.form-popup-warn,
div.form-popup-info,
div.form-popup-help,
div.form-popup-options {
-moz-border-radius: 10px 0 0 10px;
-moz-border-radius: 5px 0 0 5px;
background: #EEE;
border-radius: 5px 0 0 5px;
border: 1px solid #ccc;
border-radius: 10px 0 0 10px;
right: 0;
margin: 10px 0 10px 0;
padding: 15px;
@ -207,26 +215,25 @@ div.form-popup-options {
div.form-popup-warn,
div.form-popup-info,
div.form-popup-help {
-moz-border-radius: 10px;
border-radius: 10px;
-moz-border-radius: 5px;
border-radius: 5px;
left: 50%;
margin-left: -250px;
text-align: left;
top: 25%;
width: 500px;
z-index: 1;
z-index: 2;
}
div.form-popup-info { background: #8F8; }
div.form-popup-help { background: #F8F8F8; }
div.form-popup-options { background: #F8F8F8; z-index: 2; }
p.warning, div.form-popup-warn { background: #FF9; }
div.form-popup-options { z-index: 3; }
div.form-popup-warn span,
div.form-popup-info span,
div.form-popup-help span,
div.form-popup-options span {
color: white;
background-color: #F60;
font-weight: bold;
background-color: #666;
cursor: pointer;
padding: 4px 8px;
border-radius: 5px;
@ -236,14 +243,13 @@ div.form-popup-warn span:hover,
div.form-popup-info span:hover,
div.form-popup-help span:hover,
div.form-popup-options span:hover {
background-color: #444;
font-weight: bold;
background-color: #F60;
cursor: pointer;
}
p.status-error, p.warning { margin: 20px; padding: 15px; border-radius: 10px; -moz-border-radius: 10px; text-align: center; }
p.warning { padding: 15px; border-radius: 5px; -moz-border-radius: 5px; text-align: center; }
.highlight { min-width: 120px; font-size: 120%; text-align:center; padding:10px; background-color: #ddd; margin: 0 20px 0 0; color: #888; border-radius: 10px; -moz-border-radius: 10px; }
.highlight { min-width: 120px; font-size: 120%; text-align:center; padding:10px; background-color: #ddd; margin: 0 20px 0 0; color: #888; border-radius: 5px; -moz-border-radius: 5px; }
.highlight strong { font-size: 2em; display: block; color: #444; font-weight: normal; }
.highlight { float: left; }
@ -260,8 +266,8 @@ div.section-invisible div.hider { display: none; }
div.section div.hider, div.section-hidden div.hider { padding: 0.5em 0; }
div.section h2, div.section-hidden h2 { font-size: 1em; padding: 5px 5px 5px 25px; cursor: pointer; margin: 0; }
div.section h2:hover, div.section-hidden h2:hover { color: black; }
div.section-invisible h2 { background: white; border-bottom: 1px solid #ddd; background-image: url(../img/collapse.png); background-repeat:no-repeat; background-position:4px 4px; }
div.section-visible h2 { background: #F8F8F8; border-bottom: 1px solid #ddd; background-image: url(../img/expand.png); background-repeat:no-repeat; background-position:4px 4px; }
div.section-invisible h2 { background: white; background-image: url(../img/collapse.png); background-repeat:no-repeat; background-position:4px 4px; }
div.section-visible h2 { background: #F8F8F8; background-image: url(../img/expand.png); background-repeat:no-repeat; background-position:4px 4px; }
form { margin: 0; }
form.inline-form { float: left; }
@ -289,29 +295,29 @@ table.form table.subform { margin-bottom: 5px; }
table.form table.subform th { text-align: left; }
table.form table.subform th, table.form table.subform td { padding: 0; }
.multifield-sub { border: 1px solid #ddd; background: #F8F8F8; padding: 10px; border-radius: 10px; -moz-border-radius: 10px; float: left; margin-bottom: 10px; }
.multifield-sub { border: 1px solid #ddd; background: #F8F8F8; padding: 10px; border-radius: 5px; -moz-border-radius: 5px; float: left; margin-bottom: 10px; }
label.radio, label.checkbox { padding: 5px; border: 1px solid #eee; cursor: pointer; border-radius: 5px; -moz-border-radius: 5px; }
label.radio, label.checkbox { padding: 5px; cursor: pointer; border-radius: 5px; -moz-border-radius: 5px; border: 1px solid #ccc; }
table.two-col-layout { width: 100%; }
table.two-col-layout > tbody > tr > td { width: 50%; vertical-align: top; }
input[type=submit], button, a.button { padding: 8px; border-radius: 5px; -moz-border-radius: 5px; text-decoration: none; cursor: pointer; }
input[type=submit], button, a.button { padding: 8px; border-radius: 5px; -moz-border-radius: 5px; text-decoration: none !important; cursor: pointer; display: block; font-weight: normal !important; }
table.list input[type=submit], table.list button { padding: 3px 7px; margin: 0 0 3px 0; }
table.list input[type=submit], table.list button, table.list a.button { padding: 3px 7px; margin: 0 0 3px 0; }
input[type=submit], button, a.button {
background: #F60;
color: white !important;
background: #666;
color: #FFF !important;
border: 0;
}
input[type=submit]:hover, button:hover, a.button:hover {
background: #444;
background: #F60;
text-decoration: none !important;
}
input[type=submit][disabled], button[disabled], a.button.disabled { pointer-events: none; background: #444; }
input[type=submit][disabled]:hover, button[disabled]:hover, a.button.disabled { background: #444; }
input[type=submit][disabled], button[disabled], a.button.disabled { pointer-events: none; background: #aaa; }
input[type=submit][disabled]:hover, button[disabled]:hover, a.button.disabled { background: #aaa; }
h3 { padding: 0 0 2px 0; margin: 1em 0 1em 0; font-size: 1em; border-bottom: 1px solid #E4E4E4; font-weight: normal; }
@ -328,22 +334,17 @@ abbr.type { background: none; color: inherit; padding: 0; border-bottom: 1px dot
div.bindings-wrapper { display: inline-block; }
div.bindings-wrapper table { margin: auto; }
div.bindings-wrapper p { margin: 10px; text-align: center; }
div.bindings-wrapper span.exchange { border: 1px solid #bbb; padding: 10px; border-radius: 10px; -moz-border-radius: 10px; }
div.bindings-wrapper span.exchange { border: 1px solid #bbb; padding: 10px; border-radius: 5px; -moz-border-radius: 5px; }
div.bindings-wrapper span.queue { border: 1px solid #666; padding: 10px; }
div.bindings-wrapper td span.exchange, div.bindings-wrapper td span.queue { background: white; display: block; }
div.bindings-wrapper span.exchange a, div.bindings-wrapper span.queue a { font-weight: normal !important; }
div.bindings-wrapper p.arrow { font-size: 200%; }
#footer { overflow: auto; width: 100%; }
#footer #footer-nav { padding-top: 5px; }
#footer #footer-nav ul { float: left; list-style-type: none; padding: 0; margin: 0;}
#footer #footer-nav ul li { float: left; border-right: 1px solid #DDD; padding: 0 1em 0 0; margin: 0 1em 0 0; }
#footer #footer-nav ul li:last-child { border-right: none; }
#footer #footer-nav ul li a { color: #768781; text-decoration: underline; font-weight: bold; }
#footer #footer-nav ul li a:hover { text-decoration: underline; }
#footer #update-form { float: right; margin: 0; padding: 0; }
#footer { overflow: auto; width: 100%; border-top: 1px solid #666; }
#footer ul { list-style-type: none; padding: 0; margin: 0; }
#footer ul li { float: left; }
#footer ul li a { display: block; padding: 0.7em 1em; }
#status { clear: both; }
#scratch { display: none; }
.highlight, .mini-highlight, .micro-highlight {

View File

@ -4,7 +4,7 @@
<head>
<title>RabbitMQ Management</title>
<script src="js/ejs-1.0.min.js" type="text/javascript"></script>
<script src="js/jquery-1.8.3.min.js" type="text/javascript"></script>
<script src="js/jquery-1.12.4.min.js" type="text/javascript"></script>
<script src="js/jquery.flot-0.8.1.min.js" type="text/javascript"></script>
<script src="js/jquery.flot-0.8.1.time.min.js" type="text/javascript"></script>
<script src="js/sammy-0.7.6.min.js" type="text/javascript"></script>
@ -13,7 +13,6 @@
<script src="js/global.js" type="text/javascript"></script>
<script src="js/main.js" type="text/javascript"></script>
<script src="js/prefs.js" type="text/javascript"></script>
<script src="js/help.js" type="text/javascript"></script>
<script src="js/formatters.js" type="text/javascript"></script>
<script src="js/charts.js" type="text/javascript"></script>

View File

@ -725,7 +725,7 @@ function filter_ui_pg(items, truncate, appendselect) {
fmt_escape_html(current_filter) + '"/>' +
'<input type="checkbox" name="filter-regex-mode" id="filter-regex-mode"' +
(current_filter_regex_on ? ' checked' : '') +
'/><label for="filter-regex-mode">Regex</label> <span class="help" id="filter-regex">(?)</span>' +
'/><label for="filter-regex-mode">Regex</label> <span class="help" id="filter-regex"></span>' +
'</td></tr></table>';
function items_desc(l) {
@ -799,7 +799,7 @@ function pagiante_ui(pages, context){
res += '<th> <input type="checkbox" data-page-start="1" class="pagination_class pagination_class_checkbox" id="'+ context +'-filter-regex-mode"' ;
res += fmt_regex_request(context, "") + '></input> <label for="filter-regex-mode">Regex</label> <span class="help" id="filter-regex">(?)</span></th>' ;
res += fmt_regex_request(context, "") + '></input> <label for="filter-regex-mode">Regex</label> <span class="help" id="filter-regex"></span></th>' ;
res +=' </table>' ;
res += '<p id="filter-truncate"><span class="updatable">';

View File

@ -135,6 +135,356 @@ var COLUMNS =
['info', 'Info', true],
['reset_stats', 'Reset stats', true]]}};
// All help ? popups
var HELP = {
'exchange-auto-delete':
'If yes, the exchange will delete itself after at least one queue or exchange has been bound to this one, and then all queues or exchanges have been unbound.',
'exchange-internal':
'If yes, clients cannot publish to this exchange directly. It can only be used with exchange to exchange bindings.',
'exchange-alternate':
'If messages to this exchange cannot otherwise be routed, send them to the alternate exchange named here.<br/>(Sets the "<a target="_blank" href="http://rabbitmq.com/ae.html">alternate-exchange</a>" argument.)',
'queue-message-ttl':
'How long a message published to a queue can live before it is discarded (milliseconds).<br/>(Sets the "<a target="_blank" href="http://rabbitmq.com/ttl.html#per-queue-message-ttl">x-message-ttl</a>" argument.)',
'queue-expires':
'How long a queue can be unused for before it is automatically deleted (milliseconds).<br/>(Sets the "<a target="_blank" href="http://rabbitmq.com/ttl.html#queue-ttl">x-expires</a>" argument.)',
'queue-max-length':
'How many (ready) messages a queue can contain before it starts to drop them from its head.<br/>(Sets the "<a target="_blank" href="http://rabbitmq.com/maxlength.html">x-max-length</a>" argument.)',
'queue-max-length-bytes':
'Total body size for ready messages a queue can contain before it starts to drop them from its head.<br/>(Sets the "<a target="_blank" href="http://rabbitmq.com/maxlength.html">x-max-length-bytes</a>" argument.)',
'queue-auto-delete':
'If yes, the queue will delete itself after at least one consumer has connected, and then all consumers have disconnected.',
'queue-dead-letter-exchange':
'Optional name of an exchange to which messages will be republished if they are rejected or expire.<br/>(Sets the "<a target="_blank" href="http://rabbitmq.com/dlx.html">x-dead-letter-exchange</a>" argument.)',
'queue-dead-letter-routing-key':
'Optional replacement routing key to use when a message is dead-lettered. If this is not set, the message\'s original routing key will be used.<br/>(Sets the "<a target="_blank" href="http://rabbitmq.com/dlx.html">x-dead-letter-routing-key</a>" argument.)',
'queue-max-priority':
'Maximum number of priority levels for the queue to support; if not set, the queue will not support message priorities.<br/>(Sets the "<a target="_blank" href="http://rabbitmq.com/priority.html">x-max-priority</a>" argument.)',
'queue-lazy':
'Set the queue into lazy mode, keeping as many messages as possible on disk to reduce RAM usage; if not set, the queue will keep an in-memory cache to deliver messages as fast as possible.<br/>(Sets the "<a target="_blank" href="https://www.rabbitmq.com/lazy-queues.html">x-queue-mode</a>" argument.)',
'queue-master-locator':
'Set the queue into master location mode, determining the rule by which the queue master is located when declared on a cluster of nodes.<br/>(Sets the "<a target="_blank" href="https://www.rabbitmq.com/ha.html">x-queue-master-locator</a>" argument.)',
'queue-messages':
'<p>Message counts.</p><p>Note that "in memory" and "persistent" are not mutually exclusive; persistent messages can be in memory as well as on disc, and transient messages can be paged out if memory is tight. Non-durable queues will consider all messages to be transient.</p>',
'queue-message-body-bytes':
'<p>The sum total of the sizes of the message bodies in this queue. This only counts message bodies; it does not include message properties (including headers) or metadata used by the queue.</p><p>Note that "in memory" and "persistent" are not mutually exclusive; persistent messages can be in memory as well as on disc, and transient messages can be paged out if memory is tight. Non-durable queues will consider all messages to be transient.</p><p>If a message is routed to multiple queues on publication, its body will be stored only once (in memory and on disk) and shared between queues. The value shown here does not take account of this effect.</p>',
'queue-process-memory':
'Total memory used by this queue process. This does not include in-memory message bodies (which may be shared between queues and will appear in the global "binaries" memory) but does include everything else.',
'queue-consumer-utilisation':
'Fraction of the time that the queue is able to immediately deliver messages to consumers. If this number is less than 100% you may be able to deliver messages faster if: \
<ul> \
<li>There were more consumers or</li> \
<li>The consumers were faster or</li> \
<li>The consumers had a higher prefetch count</li> \
</ul>',
'internal-users-only':
'Only users within the internal RabbitMQ database are shown here. Other users (e.g. those authenticated over LDAP) will not appear.',
'export-definitions':
'The definitions consist of users, virtual hosts, permissions, parameters, exchanges, queues and bindings. They do not include the contents of queues or the cluster name. Exclusive queues will not be exported.',
'export-definitions-vhost':
'The definitions exported for a single virtual host consist of exchanges, queues, bindings and policies.',
'import-definitions':
'The definitions that are imported will be merged with the current definitions. If an error occurs during import, any changes made will not be rolled back.',
'import-definitions-vhost':
'For a single virtual host, only exchanges, queues, bindings and policies are imported.',
'exchange-rates-incoming':
'The incoming rate is the rate at which messages are published directly to this exchange.',
'exchange-rates-outgoing':
'The outgoing rate is the rate at which messages enter queues, having been published directly to this exchange.',
'channel-mode':
'Channel guarantee mode. Can be one of the following, or neither:<br/> \
<dl> \
<dt><abbr title="Confirm">C</abbr> &ndash; <a target="_blank" href="http://www.rabbitmq.com/confirms.html">confirm</a></dt> \
<dd>Channel will send streaming publish confirmations.</dd> \
<dt><abbr title="Transactional">T</abbr> &ndash; <a target="_blank" href="http://www.rabbitmq.com/amqp-0-9-1-reference.html#class.tx">transactional</a></dt> \
<dd>Channel is transactional.</dd> \
</dl>',
'channel-prefetch':
'Channel prefetch counts. \
<p> \
Each channel can have two prefetch counts: A per-consumer count, which \
will limit each new consumer created on the channel, and a global \
count, which is shared between all consumers on the channel.\
</p> \
<p> \
This column shows one, the other, or both limits if they are set. \
</p>',
'file-descriptors':
'<p>File descriptor count and limit, as reported by the operating \
system. The count includes network sockets and file handles.</p> \
<p>To optimize disk access RabbitMQ uses as many free descriptors as are \
available, so the count may safely approach the limit. \
However, if most of the file descriptors are used by sockets then \
persister performance will be negatively impacted.</p> \
<p>To change the limit on Unix / Linux, use "ulimit -n". To change \
the limit on Windows, set the ERL_MAX_PORTS environment variable</p> \
<p>To report used file handles on Windows, handle.exe from \
sysinternals must be installed in your path. You can download it \
<a target="_blank" href="http://technet.microsoft.com/en-us/sysinternals/bb896655">here</a>.</p>',
'socket-descriptors':
'The network sockets count and limit managed by RabbitMQ.<br/> \
When the limit is exhausted RabbitMQ will stop accepting new \
network connections.',
'memory-alarm':
'<p>The <a target="_blank" href="http://www.rabbitmq.com/memory.html#memsup">memory \
alarm</a> for this node has gone off. It will block \
incoming network traffic until the memory usage drops below \
the watermark.</p>\
<p>Note that the pale line in this case indicates the high watermark \
in relation to how much memory is used in total. </p>',
'disk-free-alarm':
'The <a target="_blank" href="http://www.rabbitmq.com/memory.html#diskfreesup">disk \
free space alarm</a> for this node has gone off. It will block \
incoming network traffic until the amount of free space exceeds \
the limit.',
'message-get-requeue':
'<p>Clicking "Get Message(s)" will consume messages from the queue. \
If requeue is set the message will be put back into the queue in place, \
but "redelivered" will be set on the message.</p> \
<p>If requeue is not set messages will be removed from the queue.</p> \
<p>Furthermore, message payloads will be truncated to 50000 bytes.</p>',
'message-publish-headers':
'Headers can have any name. Only long string headers can be set here.',
'message-publish-properties':
'<p>You can set other message properties here (delivery mode and headers \
are pulled out as the most common cases).</p>\
<p>Invalid properties will be ignored. Valid properties are:</p>\
<ul>\
<li>content_type</li>\
<li>content_encoding</li>\
<li>priority</li>\
<li>correlation_id</li>\
<li>reply_to</li>\
<li>expiration</li>\
<li>message_id</li>\
<li>timestamp</li>\
<li>type</li>\
<li>user_id</li>\
<li>app_id</li>\
<li>cluster_id</li>\
</ul>',
'string-base64':
'<p>AMQP message payloads can contain any binary content. They can \
therefore be difficult to display in a browser. The options here \
have the following meanings:</p> \
<dl> \
<dt>Auto string / base64</dt> \
<dd>If the message payload can be interpreted as a string in UTF-8 \
encoding, do so. Otherwise return the payload encoded as \
base64.</dd> \
<dt>base64</dt> \
<dd>Return the payload encoded as base64 unconditionally.</dd> \
</dl>',
'user-tags':
'Comma-separated list of tags to apply to the user. Currently \
<a target="_blank" href="http://www.rabbitmq.com/management.html#permissions">supported \
by the management plugin</a>: \
<dl> \
<dt>management</dt> \
<dd> \
User can access the management plugin \
</dd> \
<dt>policymaker</dt> \
<dd> \
User can access the management plugin and manage policies and \
parameters for the vhosts they have access to. \
</dd> \
<dt>monitoring</dt> \
<dd> \
User can access the management plugin and see all connections and \
channels as well as node-related information. \
</dd> \
<dt>administrator</dt> \
<dd> \
User can do everything monitoring can do, manage users, \
vhosts and permissions, close other user\'s connections, and manage \
policies and parameters for all vhosts. \
</dd> \
</dl> \
<p> \
Note that you can set any tag here; the links for the above four \
tags are just for convenience. \
</p>',
'queued-messages':
'<dl> \
<dt>Ready</dt>\
<dd>Number of messages that are available to be delivered now.</dd>\
<dt>Unacknowledged</dt>\
<dd>Number of messages for which the server is waiting for acknowledgement.</dd>\
<dt>Total</dt>\
<dd>The total of these two numbers.</dd>\
</dl>',
'message-rates':
'Only rates for which some activity is taking place will be shown.\
<dl>\
<dt>Publish</dt>\
<dd>Rate at which messages are entering the server.</dd>\
<dt>Publisher confirm</dt>\
<dd>Rate at which the server is confirming publishes.</dd>\
<dt>Deliver (manual ack)</dt>\
<dd>Rate at which messages are delivered to consumers that use manual acknowledgements.</dd>\
<dt>Deliver (auto ack)</dt>\
<dd>Rate at which messages are delivered to consumers that use automatic acknowledgements.</dd>\
<dt>Consumer ack</dt>\
<dd>Rate at which messages are being acknowledged by consumers.</dd>\
<dt>Redelivered</dt>\
<dd>Rate at which messages with the \'redelivered\' flag set are being delivered. Note that these messages will <b>also</b> be counted in one of the delivery rates above.</dd>\
<dt>Get (manual ack)</dt>\
<dd>Rate at which messages requiring acknowledgement are being delivered in response to basic.get.</dd>\
<dt>Get (auto ack)</dt>\
<dd>Rate at which messages not requiring acknowledgement are being delivered in response to basic.get.</dd>\
<dt>Return</dt>\
<dd>Rate at which basic.return is sent to publishers for unroutable messages published with the \'mandatory\' flag set.</dd>\
<dt>Disk read</dt>\
<dd>Rate at which queues read messages from disk.</dd>\
<dt>Disk write</dt>\
<dd>Rate at which queues write messages to disk.</dd>\
</dl>\
<p>\
Note that the last two items are originate in queues rather than \
channels; they may therefore be slightly out of sync with other \
statistics.\
</p>',
'disk-monitoring-no-watermark' : 'There is no <a target="_blank" href="http://www.rabbitmq.com/memory.html#diskfreesup">disk space low watermark</a> set. RabbitMQ will not take any action to avoid running out of disk space.',
'resource-counts' : 'Shows total number of objects for all virtual hosts the current user has access to.',
'memory-use' : '<p>Note that the memory details shown here are only updated on request - they could be too expensive to calculate every few seconds on a busy server.</p><p><a target="_blank" href="http://www.rabbitmq.com/memory-use.html">Read more</a> on memory use.</p>',
'binary-use' : '<p>Binary accounting is not exact; binaries are shared between processes (and thus the same binary might be counted in more than one section), and the VM does not allow us to track binaries that are not associated with processes (so some binary use might not appear at all).</p>',
'policy-ha-mode' : 'One of <code>all</code> (mirror to all nodes in the cluster), <code>exactly</code> (mirror to a set number of nodes) or <code>nodes</code> (mirror to an explicit list of nodes). If you choose one of the latter two, you must also set <code>ha-params</code>.',
'policy-ha-params' : 'Absent if <code>ha-mode</code> is <code>all</code>, a number\
if <code>ha-mode</code> is <code>exactly</code>, or a list\
of strings if <code>ha-mode</code> is <code>nodes</code>.',
'policy-ha-sync-mode' : 'One of <code>manual</code> or <code>automatic</code>.',
'policy-federation-upstream-set' :
'A string; only if the federation plugin is enabled. Chooses the name of a set of upstreams to use with federation, or "all" to use all upstreams. Incompatible with <code>federation-upstream</code>.',
'policy-federation-upstream' :
'A string; only if the federation plugin is enabled. Chooses a specific upstream set to use for federation. Incompatible with <code>federation-upstream-set</code>.',
'handle-exe' : 'In order to monitor the number of file descriptors in use on Windows, RabbitMQ needs the <a href="http://technet.microsoft.com/en-us/sysinternals/bb896655" target="_blank">handle.exe command line tool from Microsoft</a>. Download it and place it in the path (e.g. in C:\Windows).',
'filter-regex' :
'Whether to enable regular expression matching. Both string literals \
and regular expressions are matched in a case-insensitive manner.<br/></br/> \
(<a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions" target="_blank">Regular expression reference</a>)',
'plugins' :
'Note that only plugins which are both explicitly enabled and running are shown here.',
'io-operations':
'Rate of I/O operations. Only operations performed by the message \
persister are shown here (e.g. metadata changes in Mnesia or writes \
to the log files are not shown).\
<dl>\
<dt>Read</dt>\
<dd>Rate at which data is read from the disk.</dd>\
<dt>Write</dt>\
<dd>Rate at which data is written to the disk.</dd>\
<dt>Seek</dt>\
<dd>Rate at which the broker switches position while reading or \
writing to disk.</dd>\
<dt>Sync</dt>\
<dd>Rate at which the broker invokes <code>fsync()</code> to ensure \
data is flushed to disk.</dd>\
<dt>Reopen</dt>\
<dd>Rate at which the broker recycles file handles in order to support \
more queues than it has file handles. If this operation is occurring \
frequently you may get a performance boost from increasing the number \
of file handles available.</dd>\
</dl>',
'mnesia-transactions':
'Rate at which Mnesia transactions are initiated on this node (this node \
will also take part in Mnesia transactions initiated on other nodes).\
<dl>\
<dt>RAM only</dt>\
<dd>Rate at which RAM-only transactions take place (e.g. creation / \
deletion of transient queues).</dd>\
<dt>Disk</dt>\
<dd>Rate at which disk (and RAM) transactions take place (.e.g \
creation / deletion of durable queues).</dd>\
</dl>',
'persister-operations-msg':
'Rate at which per-message persister operations take place on this node. See \
<a href="http://www.rabbitmq.com/persistence-conf.html" target="_blank">here</a> \
for more information on the persister. \
<dl>\
<dt>QI Journal</dt>\
<dd>Rate at which message information (publishes, deliveries and \
acknowledgements) is written to queue index journals.</dd>\
<dt>Store Read</dt>\
<dd>Rate at which messages are read from the message store.</dd>\
<dt>Store Write</dt>\
<dd>Rate at which messages are written to the message store.</dd>\
</dl>',
'persister-operations-bulk':
'Rate at which whole-file persister operations take place on this node. See \
<a href="http://www.rabbitmq.com/persistence-conf.html" target="_blank">here</a> \
for more information on the persister. \
<dl>\
<dt>QI Read</dt>\
<dd>Rate at which queue index segment files are read.</dd>\
<dt>QI Write</dt>\
<dd>Rate at which queue index segment files are written. </dd>\
</dl>',
'gc-operations':
'Rate at which garbage collection operations take place on this node.',
'gc-bytes':
'Rate at which memory is reclaimed by the garbage collector on this node.',
'context-switches-operations':
'Rate at which runtime context switching takes place on this node.',
'process-reductions':
'Rate at which reductions take place on this process.'
};
///////////////////////////////////////////////////////////////////////////
// //
// Mostly constant, typically get set once at startup (or rarely anyway) //
@ -174,13 +524,22 @@ function setup_global_vars() {
user_administrator = jQuery.inArray("administrator", user_tags) != -1;
is_user_policymaker = jQuery.inArray("policymaker", user_tags) != -1;
user_monitor = jQuery.inArray("monitoring", user_tags) != -1;
exchange_types = overview.exchange_types.map(function(xt) { return xt.name; });
cluster_name = fmt_escape_html(overview.cluster_name);
$('#logout').before(
'<li>Cluster ' + (user_administrator ? '<a href="#/cluster-name">' + cluster_name + '</a>' : cluster_name) + '</li>'
);
user_name = fmt_escape_html(user.name);
replace_content('login-details',
'<p>User ' + (user_administrator ? '<a href="#/users/' + user_name + '">' + user_name + '</a>' : user_name) + '</p>' +
'<p>Cluster ' + (user_administrator ? '<a href="#/cluster-name">' + cluster_name + '</a>' : cluster_name) + '</p>' +
'<p>RabbitMQ ' + fmt_escape_html(overview.rabbitmq_version) + '</p>' +
'<p>Erlang <abbr title="' + fmt_escape_html(overview.erlang_full_version) + '">' + fmt_escape_html(overview.erlang_version) + '</abbr></p>');
$('#header #logout').prepend(
'User ' + (user_administrator ? '<a href="#/users/' + user_name + '">' + user_name + '</a>' : user_name)
);
$('#versions').html(
'<abbr title="Available exchange types: ' + exchange_types.join(", ") + '">' + fmt_escape_html(overview.rabbitmq_version) + '</abbr>' +
'<abbr title="' + fmt_escape_html(overview.erlang_full_version) + '">Erlang ' + fmt_escape_html(overview.erlang_version) + '</abbr>'
);
nodes_interesting = false;
rabbit_versions_interesting = false;
if (user_monitor) {

View File

@ -1,354 +0,0 @@
HELP = {
'exchange-auto-delete':
'If yes, the exchange will delete itself after at least one queue or exchange has been bound to this one, and then all queues or exchanges have been unbound.',
'exchange-internal':
'If yes, clients cannot publish to this exchange directly. It can only be used with exchange to exchange bindings.',
'exchange-alternate':
'If messages to this exchange cannot otherwise be routed, send them to the alternate exchange named here.<br/>(Sets the "<a target="_blank" href="http://rabbitmq.com/ae.html">alternate-exchange</a>" argument.)',
'queue-message-ttl':
'How long a message published to a queue can live before it is discarded (milliseconds).<br/>(Sets the "<a target="_blank" href="http://rabbitmq.com/ttl.html#per-queue-message-ttl">x-message-ttl</a>" argument.)',
'queue-expires':
'How long a queue can be unused for before it is automatically deleted (milliseconds).<br/>(Sets the "<a target="_blank" href="http://rabbitmq.com/ttl.html#queue-ttl">x-expires</a>" argument.)',
'queue-max-length':
'How many (ready) messages a queue can contain before it starts to drop them from its head.<br/>(Sets the "<a target="_blank" href="http://rabbitmq.com/maxlength.html">x-max-length</a>" argument.)',
'queue-max-length-bytes':
'Total body size for ready messages a queue can contain before it starts to drop them from its head.<br/>(Sets the "<a target="_blank" href="http://rabbitmq.com/maxlength.html">x-max-length-bytes</a>" argument.)',
'queue-auto-delete':
'If yes, the queue will delete itself after at least one consumer has connected, and then all consumers have disconnected.',
'queue-dead-letter-exchange':
'Optional name of an exchange to which messages will be republished if they are rejected or expire.<br/>(Sets the "<a target="_blank" href="http://rabbitmq.com/dlx.html">x-dead-letter-exchange</a>" argument.)',
'queue-dead-letter-routing-key':
'Optional replacement routing key to use when a message is dead-lettered. If this is not set, the message\'s original routing key will be used.<br/>(Sets the "<a target="_blank" href="http://rabbitmq.com/dlx.html">x-dead-letter-routing-key</a>" argument.)',
'queue-max-priority':
'Maximum number of priority levels for the queue to support; if not set, the queue will not support message priorities.<br/>(Sets the "<a target="_blank" href="http://rabbitmq.com/priority.html">x-max-priority</a>" argument.)',
'queue-lazy':
'Set the queue into lazy mode, keeping as many messages as possible on disk to reduce RAM usage; if not set, the queue will keep an in-memory cache to deliver messages as fast as possible.<br/>(Sets the "<a target="_blank" href="https://www.rabbitmq.com/lazy-queues.html">x-queue-mode</a>" argument.)',
'queue-master-locator':
'Set the queue into master location mode, determining the rule by which the queue master is located when declared on a cluster of nodes.<br/>(Sets the "<a target="_blank" href="https://www.rabbitmq.com/ha.html">x-queue-master-locator</a>" argument.)',
'queue-messages':
'<p>Message counts.</p><p>Note that "in memory" and "persistent" are not mutually exclusive; persistent messages can be in memory as well as on disc, and transient messages can be paged out if memory is tight. Non-durable queues will consider all messages to be transient.</p>',
'queue-message-body-bytes':
'<p>The sum total of the sizes of the message bodies in this queue. This only counts message bodies; it does not include message properties (including headers) or metadata used by the queue.</p><p>Note that "in memory" and "persistent" are not mutually exclusive; persistent messages can be in memory as well as on disc, and transient messages can be paged out if memory is tight. Non-durable queues will consider all messages to be transient.</p><p>If a message is routed to multiple queues on publication, its body will be stored only once (in memory and on disk) and shared between queues. The value shown here does not take account of this effect.</p>',
'queue-process-memory':
'Total memory used by this queue process. This does not include in-memory message bodies (which may be shared between queues and will appear in the global "binaries" memory) but does include everything else.',
'queue-consumer-utilisation':
'Fraction of the time that the queue is able to immediately deliver messages to consumers. If this number is less than 100% you may be able to deliver messages faster if: \
<ul> \
<li>There were more consumers or</li> \
<li>The consumers were faster or</li> \
<li>The consumers had a higher prefetch count</li> \
</ul>',
'internal-users-only':
'Only users within the internal RabbitMQ database are shown here. Other users (e.g. those authenticated over LDAP) will not appear.',
'export-definitions':
'The definitions consist of users, virtual hosts, permissions, parameters, exchanges, queues and bindings. They do not include the contents of queues or the cluster name. Exclusive queues will not be exported.',
'export-definitions-vhost':
'The definitions exported for a single virtual host consist of exchanges, queues, bindings and policies.',
'import-definitions':
'The definitions that are imported will be merged with the current definitions. If an error occurs during import, any changes made will not be rolled back.',
'import-definitions-vhost':
'For a single virtual host, only exchanges, queues, bindings and policies are imported.',
'exchange-rates-incoming':
'The incoming rate is the rate at which messages are published directly to this exchange.',
'exchange-rates-outgoing':
'The outgoing rate is the rate at which messages enter queues, having been published directly to this exchange.',
'channel-mode':
'Channel guarantee mode. Can be one of the following, or neither:<br/> \
<dl> \
<dt><abbr title="Confirm">C</abbr> &ndash; <a target="_blank" href="http://www.rabbitmq.com/confirms.html">confirm</a></dt> \
<dd>Channel will send streaming publish confirmations.</dd> \
<dt><abbr title="Transactional">T</abbr> &ndash; <a target="_blank" href="http://www.rabbitmq.com/amqp-0-9-1-reference.html#class.tx">transactional</a></dt> \
<dd>Channel is transactional.</dd> \
</dl>',
'channel-prefetch':
'Channel prefetch counts. \
<p> \
Each channel can have two prefetch counts: A per-consumer count, which \
will limit each new consumer created on the channel, and a global \
count, which is shared between all consumers on the channel.\
</p> \
<p> \
This column shows one, the other, or both limits if they are set. \
</p>',
'file-descriptors':
'<p>File descriptor count and limit, as reported by the operating \
system. The count includes network sockets and file handles.</p> \
<p>To optimize disk access RabbitMQ uses as many free descriptors as are \
available, so the count may safely approach the limit. \
However, if most of the file descriptors are used by sockets then \
persister performance will be negatively impacted.</p> \
<p>To change the limit on Unix / Linux, use "ulimit -n". To change \
the limit on Windows, set the ERL_MAX_PORTS environment variable</p> \
<p>To report used file handles on Windows, handle.exe from \
sysinternals must be installed in your path. You can download it \
<a target="_blank" href="http://technet.microsoft.com/en-us/sysinternals/bb896655">here</a>.</p>',
'socket-descriptors':
'The network sockets count and limit managed by RabbitMQ.<br/> \
When the limit is exhausted RabbitMQ will stop accepting new \
network connections.',
'memory-alarm':
'<p>The <a target="_blank" href="http://www.rabbitmq.com/memory.html#memsup">memory \
alarm</a> for this node has gone off. It will block \
incoming network traffic until the memory usage drops below \
the watermark.</p>\
<p>Note that the pale line in this case indicates the high watermark \
in relation to how much memory is used in total. </p>',
'disk-free-alarm':
'The <a target="_blank" href="http://www.rabbitmq.com/memory.html#diskfreesup">disk \
free space alarm</a> for this node has gone off. It will block \
incoming network traffic until the amount of free space exceeds \
the limit.',
'message-get-requeue':
'<p>Clicking "Get Message(s)" will consume messages from the queue. \
If requeue is set the message will be put back into the queue in place, \
but "redelivered" will be set on the message.</p> \
<p>If requeue is not set messages will be removed from the queue.</p> \
<p>Furthermore, message payloads will be truncated to 50000 bytes.</p>',
'message-publish-headers':
'Headers can have any name. Only long string headers can be set here.',
'message-publish-properties':
'<p>You can set other message properties here (delivery mode and headers \
are pulled out as the most common cases).</p>\
<p>Invalid properties will be ignored. Valid properties are:</p>\
<ul>\
<li>content_type</li>\
<li>content_encoding</li>\
<li>priority</li>\
<li>correlation_id</li>\
<li>reply_to</li>\
<li>expiration</li>\
<li>message_id</li>\
<li>timestamp</li>\
<li>type</li>\
<li>user_id</li>\
<li>app_id</li>\
<li>cluster_id</li>\
</ul>',
'string-base64':
'<p>AMQP message payloads can contain any binary content. They can \
therefore be difficult to display in a browser. The options here \
have the following meanings:</p> \
<dl> \
<dt>Auto string / base64</dt> \
<dd>If the message payload can be interpreted as a string in UTF-8 \
encoding, do so. Otherwise return the payload encoded as \
base64.</dd> \
<dt>base64</dt> \
<dd>Return the payload encoded as base64 unconditionally.</dd> \
</dl>',
'user-tags':
'Comma-separated list of tags to apply to the user. Currently \
<a target="_blank" href="http://www.rabbitmq.com/management.html#permissions">supported \
by the management plugin</a>: \
<dl> \
<dt>management</dt> \
<dd> \
User can access the management plugin \
</dd> \
<dt>policymaker</dt> \
<dd> \
User can access the management plugin and manage policies and \
parameters for the vhosts they have access to. \
</dd> \
<dt>monitoring</dt> \
<dd> \
User can access the management plugin and see all connections and \
channels as well as node-related information. \
</dd> \
<dt>administrator</dt> \
<dd> \
User can do everything monitoring can do, manage users, \
vhosts and permissions, close other user\'s connections, and manage \
policies and parameters for all vhosts. \
</dd> \
</dl> \
<p> \
Note that you can set any tag here; the links for the above four \
tags are just for convenience. \
</p>',
'queued-messages':
'<dl> \
<dt>Ready</dt>\
<dd>Number of messages that are available to be delivered now.</dd>\
<dt>Unacknowledged</dt>\
<dd>Number of messages for which the server is waiting for acknowledgement.</dd>\
<dt>Total</dt>\
<dd>The total of these two numbers.</dd>\
</dl>',
'message-rates':
'Only rates for which some activity is taking place will be shown.\
<dl>\
<dt>Publish</dt>\
<dd>Rate at which messages are entering the server.</dd>\
<dt>Publisher confirm</dt>\
<dd>Rate at which the server is confirming publishes.</dd>\
<dt>Deliver (manual ack)</dt>\
<dd>Rate at which messages are delivered to consumers that use manual acknowledgements.</dd>\
<dt>Deliver (auto ack)</dt>\
<dd>Rate at which messages are delivered to consumers that use automatic acknowledgements.</dd>\
<dt>Consumer ack</dt>\
<dd>Rate at which messages are being acknowledged by consumers.</dd>\
<dt>Redelivered</dt>\
<dd>Rate at which messages with the \'redelivered\' flag set are being delivered. Note that these messages will <b>also</b> be counted in one of the delivery rates above.</dd>\
<dt>Get (manual ack)</dt>\
<dd>Rate at which messages requiring acknowledgement are being delivered in response to basic.get.</dd>\
<dt>Get (auto ack)</dt>\
<dd>Rate at which messages not requiring acknowledgement are being delivered in response to basic.get.</dd>\
<dt>Return</dt>\
<dd>Rate at which basic.return is sent to publishers for unroutable messages published with the \'mandatory\' flag set.</dd>\
<dt>Disk read</dt>\
<dd>Rate at which queues read messages from disk.</dd>\
<dt>Disk write</dt>\
<dd>Rate at which queues write messages to disk.</dd>\
</dl>\
<p>\
Note that the last two items are originate in queues rather than \
channels; they may therefore be slightly out of sync with other \
statistics.\
</p>',
'disk-monitoring-no-watermark' : 'There is no <a target="_blank" href="http://www.rabbitmq.com/memory.html#diskfreesup">disk space low watermark</a> set. RabbitMQ will not take any action to avoid running out of disk space.',
'resource-counts' : 'Shows total number of objects for all virtual hosts the current user has access to.',
'memory-use' : '<p>Note that the memory details shown here are only updated on request - they could be too expensive to calculate every few seconds on a busy server.</p><p><a target="_blank" href="http://www.rabbitmq.com/memory-use.html">Read more</a> on memory use.</p>',
'binary-use' : '<p>Binary accounting is not exact; binaries are shared between processes (and thus the same binary might be counted in more than one section), and the VM does not allow us to track binaries that are not associated with processes (so some binary use might not appear at all).</p>',
'policy-ha-mode' : 'One of <code>all</code> (mirror to all nodes in the cluster), <code>exactly</code> (mirror to a set number of nodes) or <code>nodes</code> (mirror to an explicit list of nodes). If you choose one of the latter two, you must also set <code>ha-params</code>.',
'policy-ha-params' : 'Absent if <code>ha-mode</code> is <code>all</code>, a number\
if <code>ha-mode</code> is <code>exactly</code>, or a list\
of strings if <code>ha-mode</code> is <code>nodes</code>.',
'policy-ha-sync-mode' : 'One of <code>manual</code> or <code>automatic</code>.',
'policy-federation-upstream-set' :
'A string; only if the federation plugin is enabled. Chooses the name of a set of upstreams to use with federation, or "all" to use all upstreams. Incompatible with <code>federation-upstream</code>.',
'policy-federation-upstream' :
'A string; only if the federation plugin is enabled. Chooses a specific upstream set to use for federation. Incompatible with <code>federation-upstream-set</code>.',
'handle-exe' : 'In order to monitor the number of file descriptors in use on Windows, RabbitMQ needs the <a href="http://technet.microsoft.com/en-us/sysinternals/bb896655" target="_blank">handle.exe command line tool from Microsoft</a>. Download it and place it in the path (e.g. in C:\Windows).',
'filter-regex' :
'Whether to enable regular expression matching. Both string literals \
and regular expressions are matched in a case-insensitive manner.<br/></br/> \
(<a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions" target="_blank">Regular expression reference</a>)',
'plugins' :
'Note that only plugins which are both explicitly enabled and running are shown here.',
'io-operations':
'Rate of I/O operations. Only operations performed by the message \
persister are shown here (e.g. metadata changes in Mnesia or writes \
to the log files are not shown).\
<dl>\
<dt>Read</dt>\
<dd>Rate at which data is read from the disk.</dd>\
<dt>Write</dt>\
<dd>Rate at which data is written to the disk.</dd>\
<dt>Seek</dt>\
<dd>Rate at which the broker switches position while reading or \
writing to disk.</dd>\
<dt>Sync</dt>\
<dd>Rate at which the broker invokes <code>fsync()</code> to ensure \
data is flushed to disk.</dd>\
<dt>Reopen</dt>\
<dd>Rate at which the broker recycles file handles in order to support \
more queues than it has file handles. If this operation is occurring \
frequently you may get a performance boost from increasing the number \
of file handles available.</dd>\
</dl>',
'mnesia-transactions':
'Rate at which Mnesia transactions are initiated on this node (this node \
will also take part in Mnesia transactions initiated on other nodes).\
<dl>\
<dt>RAM only</dt>\
<dd>Rate at which RAM-only transactions take place (e.g. creation / \
deletion of transient queues).</dd>\
<dt>Disk</dt>\
<dd>Rate at which disk (and RAM) transactions take place (.e.g \
creation / deletion of durable queues).</dd>\
</dl>',
'persister-operations-msg':
'Rate at which per-message persister operations take place on this node. See \
<a href="http://www.rabbitmq.com/persistence-conf.html" target="_blank">here</a> \
for more information on the persister. \
<dl>\
<dt>QI Journal</dt>\
<dd>Rate at which message information (publishes, deliveries and \
acknowledgements) is written to queue index journals.</dd>\
<dt>Store Read</dt>\
<dd>Rate at which messages are read from the message store.</dd>\
<dt>Store Write</dt>\
<dd>Rate at which messages are written to the message store.</dd>\
</dl>',
'persister-operations-bulk':
'Rate at which whole-file persister operations take place on this node. See \
<a href="http://www.rabbitmq.com/persistence-conf.html" target="_blank">here</a> \
for more information on the persister. \
<dl>\
<dt>QI Read</dt>\
<dd>Rate at which queue index segment files are read.</dd>\
<dt>QI Write</dt>\
<dd>Rate at which queue index segment files are written. </dd>\
</dl>',
'gc-operations':
'Rate at which garbage collection operations take place on this node.',
'gc-bytes':
'Rate at which memory is reclaimed by the garbage collector on this node.',
'context-switches-operations':
'Rate at which runtime context switching takes place on this node.',
'process-reductions':
'Rate at which reductions take place on this process.',
'foo': 'foo' // No comma.
};
function help(id) {
show_popup('help', HELP[id]);
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -487,20 +487,15 @@ function apply_state(reqs) {
return reqs2;
}
function show_popup(type, text, mode) {
function show_popup(type, text, _mode) {
var cssClass = '.form-popup-' + type;
function hide() {
$(cssClass).fadeOut(100, function() {
$(this).remove();
});
}
hide();
if ($(cssClass).length && type === 'help' &&
$(cssClass).text().indexOf(text.replace(/<[^>]*>/g, '')) != -1 ) {
return;
}
$('h1').after(format('error-popup', {'type': type, 'text': text}));
$('#outer').after(format('popup', {'type': type, 'text': text}));
$(cssClass).fadeIn(100);
$(cssClass + ' span').click(function () {
$('.popup-owner').removeClass('popup-owner');
@ -549,7 +544,7 @@ function postprocess() {
return confirm("Are you sure? This object cannot be recovered " +
"after deletion.");
});
$('div.section h2, div.section-hidden h2').die().live('click', function() {
$('div.section h2, div.section-hidden h2').on('click', function() {
toggle_visibility($(this));
});
$('label').map(function() {
@ -577,11 +572,10 @@ function postprocess() {
$('.update-manual').click(function() {
update_manual($(this).attr('for'), $(this).attr('query'));
});
$('input, select').die();
$('.multifield input').live('keyup', function() {
$('.multifield input').on('keyup', function() {
update_multifields();
});
$('.multifield select').live('change', function() {
$('.multifield select').on('change', function() {
update_multifields();
});
$('.controls-appearance').change(function() {
@ -597,38 +591,22 @@ function postprocess() {
}
}
});
$('.list-exchanges').change(function() {
var selected = $(this).val();
var data = {'exchanges' : JSON.parse(sync_get('/exchanges/' + esc(selected)))};
replace_content('list-exchanges', format('list-exchanges', data));
postprocess_partial();
$(document).on('click', '.help', function() {
show_popup('help', HELP[$(this).attr('id')]);
});
$('.help').die().live('click', function() {
help($(this).attr('id'));
});
$('.popup-options-link').die().live('click', function() {
var remove = $('.popup-owner').length == 1 &&
$('.popup-owner').get(0) == $(this).get(0);
$(document).on('click', '.popup-options-link', function() {
$('.popup-owner').removeClass('popup-owner');
if (remove) {
$('.form-popup-options').fadeOut(100, function() {
$(this).remove();
});
}
else {
$(this).addClass('popup-owner');
var template = $(this).attr('type') + '-options';
show_popup('options', format(template, {span: $(this)}),
'fade');
}
$(this).addClass('popup-owner');
var template = $(this).attr('type') + '-options';
show_popup('options', format(template, {span: $(this)}), 'fade');
});
$('.rate-visibility-option').die().live('click', function() {
$(document).on('click', '.rate-visibility-option', function() {
var k = $(this).attr('data-pref');
var show = get_pref(k) !== 'true';
store_pref(k, '' + show);
partial_update();
});
$('input, select').live('focus', function() {
$(document).on('focus', 'input, select', function() {
update_counter = 0; // If there's interaction, reset the counter.
});
$('.tag-link').click(function() {
@ -645,12 +623,12 @@ function postprocess() {
type.val($(this).attr('type'));
update_multifields();
});
$('form.auto-submit select, form.auto-submit input').live('click', function(){
$(document).on('click', 'form.auto-submit select, form.auto-submit input', function(){
$(this).parents('form').submit();
});
$('#filter').die().live('keyup', debounce(update_filter, 500));
$('#filter').on('keyup', debounce(update_filter, 500));
$('#filter-regex-mode').change(update_filter_regex_mode);
$('#truncate').die().live('keyup', debounce(update_truncate, 500));
$('#truncate').on('keyup', debounce(update_truncate, 500));
if (! user_administrator) {
$('.administrator-only').remove();
}
@ -731,7 +709,6 @@ function renderChannels() {
'channels', '#/channels');
}
function update_pages_from_ui(sender) {
var val = $(sender).val();
var raw = !!$(sender).attr('data-page-start') ? $(sender).attr('data-page-start') : val;
@ -1054,11 +1031,11 @@ function format(template, json) {
function update_status(status) {
var text;
if (status == 'ok')
text = "Last update: " + fmt_date(new Date());
text = "Refreshed " + fmt_date(new Date());
else if (status == 'error') {
var next_try = new Date(new Date().getTime() + timer_interval);
text = "Error: could not connect to server since " +
fmt_date(last_successful_connect) + ".<br/>Will retry at " +
fmt_date(last_successful_connect) + ". Will retry at " +
fmt_date(next_try) + ".";
}
else
@ -1222,8 +1199,7 @@ function check_bad_response(req, full_page_404) {
update_status('error');
}
else {
debug("Got response code " + req.status + " with body " +
req.responseText);
debug("Management API returned status code " + req.status + ": <strong>" + fmt_escape_html_one_line(req.responseText) + "</strong>");
clearInterval(timer);
}

View File

@ -151,7 +151,8 @@
<tr>
<td>Add</td>
<td>
<span class="argument-link" field="arguments" key="alternate-exchange" type="string">Alternate exchange <span class="help" id="exchange-alternate"></span>
<span class="argument-link" field="arguments" key="alternate-exchange" type="string">Alternate exchange</span>
<span class="help" id="exchange-alternate"></span>
</td>
</tr>
</table>

View File

@ -1,22 +1,31 @@
<div id="header">
<div id="login-version">
<form action="#/logout" method="put">
<input type="submit" value="Log out"/>
</form>
<div id="login-details"></div>
</div>
<div id="logo">
<a href="/"><img src="img/rabbitmqlogo.png" alt="RabbitMQ logo" width="204" height="37"/></a>
<a href="api/" target="_blank">HTTP API</a>
<a href="cli/" target="_blank">CLI</a>
</div>
<div id="menu">
<p id="vhost-form">
<label for="show-vhost">Virtual host: </label>
<ul id="topnav">
<li id="interval">
<label for="update-every" id="status"></label>
<select id="update-every">
<option value="5000">Refresh every 5 seconds</option>
<option value="10000">Refresh every 10 seconds</option>
<option value="30000">Refresh every 30 seconds</option>
<option value="">Do not refresh</option>
</select>
</li>
<li id="vhost">
<label for="show-vhost">Virtual host </label>
<select id="show-vhost">
<option value="">All</option>
</select>
</p>
</li>
<li id="logout">
<form action="#/logout" method="put">
<input type="submit" value="Log out"/>
</form>
</li>
</ul>
<div id="logo">
<a href="/"><img src="img/rabbitmqlogo.png" alt="RabbitMQ logo" width="204" height="37"/></a>
<span id="versions"></span>
</div>
<div id="menu">
<ul id="tabs">
</ul>
</div>
@ -24,26 +33,15 @@
<div id="rhs"></div>
<div id="main"></div>
<div id="footer">
<div id="footer-nav">
<ul>
<li><a href="https://www.rabbitmq.com/admin-guide.html" target="_blank">Server Docs</a></li>
<li><a href="https://www.rabbitmq.com/getstarted.html" target="_blank">Tutorials</a></li>
<li><a href="https://groups.google.com/forum/#!forum/rabbitmq-users" target="_blank">Community Support</a></li>
<li><a href="https://rabbitmq-slack.herokuapp.com/" target="_blank">Community Slack</a></li>
<li><a href="http://www.rabbitmq.com/services.html" target="_blank">Commercial Support</a></li>
<li><a href="https://www.rabbitmq.com/plugins.html" target="_blank">Plugins</a></li>
<li><a href="http://www.rabbitmq.com/github.html" target="_blank">GitHub</a></li>
<li><a href="https://www.rabbitmq.com/changelog.html" target="_blank">Changelog</a></li>
</ul>
</div>
<div id="update-form">
<label for="update-every">Update </label>
<select id="update-every">
<option value="5000">every 5 seconds</option>
<option value="30000">every 30 seconds</option>
<option value="300000">every 5 minutes</option>
<option value="">never</option>
</select>
</div>
<ul>
<li><a href="api/" target="_blank">HTTP API</a></li>
<li><a href="https://www.rabbitmq.com/admin-guide.html" target="_blank">Server Docs</a></li>
<li><a href="https://www.rabbitmq.com/getstarted.html" target="_blank">Tutorials</a></li>
<li><a href="https://groups.google.com/forum/#!forum/rabbitmq-users" target="_blank">Community Support</a></li>
<li><a href="https://rabbitmq-slack.herokuapp.com/" target="_blank">Community Slack</a></li>
<li><a href="http://www.rabbitmq.com/services.html" target="_blank">Commercial Support</a></li>
<li><a href="https://www.rabbitmq.com/plugins.html" target="_blank">Plugins</a></li>
<li><a href="http://www.rabbitmq.com/github.html" target="_blank">GitHub</a></li>
<li><a href="https://www.rabbitmq.com/changelog.html" target="_blank">Changelog</a></li>
</ul>
</div>
<div id="status"></div>

View File

@ -116,9 +116,9 @@
<span class="argument-link" field="definition" key="message-ttl" type="number">Message TTL</span> |
<span class="argument-link" field="definition" key="expires" type="number">Auto expire</span> |
<span class="argument-link" field="definition" key="max-length" type="number">Max length</span> |
<span class="argument-link" field="definition" key="max-length-bytes" type="number">Max length bytes</span><br/>
<span class="argument-link" field="definition" key="max-length-bytes" type="number">Max length bytes</span><br />
<span class="argument-link" field="definition" key="dead-letter-exchange" type="string">Dead letter exchange</span> |
<span class="argument-link" field="definition" key="dead-letter-routing-key" type="string">Dead letter routing key</span> |
<span class="argument-link" field="definition" key="dead-letter-routing-key" type="string">Dead letter routing key</span><br />
<span class="argument-link" field="definition" key="queue-mode" type="string" value="lazy">Lazy mode</span> |
<span class="argument-link" field="definition" key="queue-master-locator" type="string">Master Locator</span>
</td>
@ -127,6 +127,7 @@
<td>Exchanges</td>
<td>
<span class="argument-link" field="definition" key="alternate-exchange" type="string">Alternate exchange</span>
<span class="help" id="exchange-alternate"></span>
</td>
</tr>
</table>

View File

@ -1 +1 @@
<p class="status-<%= fmt_string(status) %>"><%= text %></p>
<span class="status-<%= fmt_string(status) %>"><%= text %></span>

View File

@ -82,7 +82,7 @@
<td>
<span class="tag-link" tag="administrator">Admin</span> |
<span class="tag-link" tag="monitoring">Monitoring</span> |
<span class="tag-link" tag="policymaker">Policymaker</span> |
<span class="tag-link" tag="policymaker">Policymaker</span><br />
<span class="tag-link" tag="management">Management</span> |
<span class="tag-link" tag="impersonator">Impersonator</span> |
<span class="tag-link" tag="">None</span>