diff options
author | Christopher Lenz <cmlenz@apache.org> | 2009-01-26 20:38:52 +0000 |
---|---|---|
committer | Christopher Lenz <cmlenz@apache.org> | 2009-01-26 20:38:52 +0000 |
commit | 7d2eeb4026f84d92e43856080ac3dbad6da41817 (patch) | |
tree | acd6dd7353396075a7db967bc14a5b49599fa50c | |
parent | 60be7c2a8f3d88f47be7eef5cf0a973c868cfcbc (diff) |
Add a page to Futon that shows the currently active tasks (compaction, view indexing, etc).
git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@737829 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | share/www/_sidebar.html | 3 | ||||
-rw-r--r-- | share/www/script/jquery.couch.js | 18 | ||||
-rw-r--r-- | share/www/status.html | 106 | ||||
-rw-r--r-- | share/www/style/layout.css | 13 |
4 files changed, 139 insertions, 1 deletions
diff --git a/share/www/_sidebar.html b/share/www/_sidebar.html index 6ef988b9..670a8e54 100644 --- a/share/www/_sidebar.html +++ b/share/www/_sidebar.html @@ -5,8 +5,9 @@ <ul id="nav"> <li><span>Tools</span><ul> <li><a href="index.html">Overview</a></li> - <li><a href="replicator.html">Replicator</a></li> <li><a href="config.html">Configuration</a></li> + <li><a href="replicator.html">Replicator</a></li> + <li><a href="status.html">Status</a></li> <li><a href="couch_tests.html?script/couch_tests.js">Test Suite</a></li> </ul></li> <li><span>Recent Databases</span> diff --git a/share/www/script/jquery.couch.js b/share/www/script/jquery.couch.js index f3547b8d..c92be220 100644 --- a/share/www/script/jquery.couch.js +++ b/share/www/script/jquery.couch.js @@ -14,6 +14,24 @@ $.couch = $.couch || {}; $.extend($.couch, { + activeTasks: function(options) { + options = options || {}; + $.ajax({ + type: "GET", url: "/_active_tasks", dataType: "json", + complete: function(req) { + var resp = $.httpData(req, "json"); + if (req.status == 200) { + if (options.success) options.success(resp); + } else if (options.error) { + options.error(req.status, resp.error, resp.reason); + } else { + alert("Active task status could not be retrieved: " + + resp.reason); + } + } + }); + }, + allDbs: function(options) { options = options || {}; $.ajax({ diff --git a/share/www/status.html b/share/www/status.html new file mode 100644 index 00000000..fa2e1d24 --- /dev/null +++ b/share/www/status.html @@ -0,0 +1,106 @@ +<!DOCTYPE html> +<!-- + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed +under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the License for the +specific language governing permissions and limitations under the License. + +--> +<html lang="en"> + <head> + <title>Status</title> + <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> + <link rel="stylesheet" href="style/layout.css?0.9.0" type="text/css"> + <script src="script/json2.js"></script> + <script src="script/jquery.js?1.3.1"></script> + <script src="script/jquery.cookies.js?0.9.0"></script> + <script src="script/jquery.couch.js?0.9.0"></script> + <script src="script/futon.js?0.9.0"></script> + </head> + <body><div id="wrap"> + <h1> + <a href="index.html">Overview</a> + <strong>Status</strong> + </h1> + <div id="content"> + <div id="interval"> + <label>Poll interval: + <input type="range" min="1" max="30" value="5" size="3"> + <span class="secs">5</span> second(s) + </label> + </div> + <table id="status" class="listing" cellspacing="0"> + <caption>Active Tasks</caption> + <thead><tr> + <th>Type</th> + <th>Object</th> + <th>PID</th> + <th>Status</th> + </tr></thead> + <tbody class="content"></tbody> + </table> + + </div> + </div></body> + <script> + var refreshTimeout = null; + + function refresh() { + $.couch.activeTasks({ + success: function(tasks) { + clearTimeout(refreshTimeout); + $("#status tbody.content").empty(); + if (!tasks.length) { + $("<tr class='none'><th colspan='4'>No tasks running</th></tr>") + .appendTo("#status tbody.content"); + } else { + $.each(tasks, function(idx, task) { + $("<tr><th></th><td class='object'></td><td class='pid'></td><td class='status'></td></tr>") + .find("th").text(task.type).end() + .find("td.object").text(task.task).end() + .find("td.pid").text(task.pid).end() + .find("td.status").text(task.status).end() + .appendTo("#status tbody.content"); + }); + } + refreshTimeout = setTimeout(refresh, + parseInt($("#interval input").val(), 10) * 1000); + } + }); + } + + function updateInterval(value) { + if (isNaN(value)) { + value = 5; + $("#interval input").val(value); + } + $("#interval .secs").text(value); + refresh(); + $.cookies.set("pollinterval", value); + } + + $(function() { + var slider = $("#interval input"); + slider.val(parseInt($.cookies.get("pollinterval", "5")) || 5); + if (slider[0].type == "range") { + slider.bind("input", function() { + updateInterval(this.value); + }); + $("#interval .secs").text($("#interval input").val()); + } else { + slider.bind("change", function() { + updateInterval(this.value); + }); + $("#interval .secs").hide(); + } + refresh(); + }); + </script> +</html> diff --git a/share/www/style/layout.css b/share/www/style/layout.css index 0d63d934..b4d20322 100644 --- a/share/www/style/layout.css +++ b/share/www/style/layout.css @@ -517,3 +517,16 @@ form#replicator p.swap button:hover { color: #000; } form#replicator p.actions { padding: 1px; clear: left; margin: 0; text-align: right; } + +/* Active tasks */ + +#interval { color: #666; float: right; font-size: 90%; font-weight: bold; + line-height: 16px; padding: 5px; +} +#interval input { vertical-align: top; } +#interval .secs { display: inline-block; width: 2em; text-align: right; } + +#status tr.none th { color: #666; font-weight: normal; } +#status td.object, #status td.pid { + font-family: "DejaVu Sans Mono",Monaco,monospace; font-size: 11px; +} |