| <!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.11.0" type="text/css"> |
| <script src="script/json2.js"></script> |
| <script src="script/sha1.js"></script> |
| <script src="script/jquery.js"></script> |
| <script src="script/jquery.couch.js"></script> |
| <script src="script/jquery.dialog.js"></script> |
| <script src="script/futon.js"></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>Started on</th> |
| <th>Last updated on</th> |
| <th>PID</th> |
| <th>Status</th> |
| </tr></thead> |
| <tbody class="content"></tbody> |
| </table> |
| |
| </div> |
| </div></body> |
| <script> |
| function toTaskDate(timestamp) { |
| var d = new Date(timestamp * 1000); |
| var hours = d.getHours(), min = d.getMinutes(), secs = d.getSeconds(); |
| var year = d.getFullYear(), month = d.getMonth() + 1, day = d.getDate(); |
| |
| return String(year) + "-" + (month < 10 ? "0" + month : month) + "-" + |
| day + " " + (hours < 10 ? "0" + hours : hours) + ":" + |
| (min < 10 ? "0" + min : min) + ":" + (secs < 10 ? "0" + secs : secs); |
| } |
| var refreshTimeout = null; |
| |
| $.futon.storage.declare("poll_interval", {defaultValue: 5}); |
| |
| function refresh() { |
| $.couch.activeTasks({ |
| success: function(tasks) { |
| clearTimeout(refreshTimeout); |
| $("#status tbody.content").empty(); |
| if (!tasks.length) { |
| $("<tr class='none'><th colspan='6'>No tasks running</th></tr>") |
| .appendTo("#status tbody.content"); |
| } else { |
| $.each(tasks, function(idx, task) { |
| var status, type, object; |
| |
| switch (task.type) { |
| case "database_compaction": |
| type = "Database compaction"; |
| object = task.database + (task.retry ? " retry" : ""); |
| status = "Copied " + task.changes_done + " of " + |
| task.total_changes + " changes (" + task.progress + "%)"; |
| break; |
| case "view_compaction": |
| type = "View compaction"; |
| object = task.database + ", " + task.design_document; |
| status = "Progress " + task.progress + "%"; |
| break; |
| case "indexer": |
| type = "Indexer"; |
| object = task.database + ", " + task.design_document; |
| status = "Processed " + task.changes_done + " of " + |
| task.total_changes + " changes (" + task.progress + "%)"; |
| break; |
| case "replication": |
| type = "Replication"; |
| object = task.source + " to " + task.target; |
| status = "Checkpointed source sequence " + |
| task.checkpointed_source_seq + ", current source sequence " + |
| task.source_seq + ", progress " + task.progress + "%"; |
| } |
| |
| $("<tr><th></th><td class='object'></td><td class='started'>" + |
| "</td><td class='updated'></td><td class='pid'></td>" + |
| "<td class='status'></td></tr>") |
| .find("th").text(type).end() |
| .find("td.object").text(object).end() |
| .find("td.started").text(toTaskDate(task.started_on)).end() |
| .find("td.updated").text(toTaskDate(task.updated_on)).end() |
| .find("td.pid").text(task.pid).end() |
| .find("td.status").text(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(); |
| $.futon.storage.set("poll_interval", value); |
| } |
| |
| $(function() { |
| var slider = $("#interval input"); |
| slider.val(parseInt($.futon.storage.get("poll_interval"))); |
| 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> |