| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you 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. |
| --> |
| |
| {{> www/common-header.tmpl }} |
| {{> www/query_detail_tabs.tmpl }} |
| <br/> |
| {{?backend_instances}} |
| <div> |
| <label> |
| <input type="checkbox" checked="true" id="toggle" onClick="toggleRefresh()"/> |
| <span id="refresh_on">Auto-refresh on</span> |
| </label> Last updated: <span id="last-updated"></span> |
| </div> |
| |
| <br/> |
| <table id="finstances" class='table table-hover table-bordered'> |
| <thead> |
| <tr> |
| <th>Host</th> |
| <th>Fragment<br/>Name</th> |
| <th>Instance ID</th> |
| <th>Current state</th> |
| <th>Done</th> |
| <th>Time since last report (ms)</th> |
| </tr> |
| </thead> |
| <tbody> |
| |
| </tbody> |
| </table> |
| |
| <script> |
| var intervalId = 0; |
| var table = null; |
| var refresh = function () { |
| table.ajax.reload(); |
| document.getElementById("last-updated").textContent = new Date(); |
| }; |
| |
| // Unpack Json backend_states by merging the backend host name into every instance stats |
| // row. Also clears the last report timestamp field for instances that have not started or |
| // have already finished execution. |
| function unpackJson(json) { |
| var result = new Array(); |
| if (typeof json.backend_instances === "undefined") { |
| // Table will be empty, remove it. |
| table.table().destroy(true); |
| $("#finstances").remove(); |
| // Display completion message. |
| $("#query_finished_alert").css("visibility", "visible"); |
| // Stop auto refresh |
| $("#toggle").prop("checked", false); |
| toggleRefresh(); |
| return json; |
| } |
| for (var i = 0; i < json.backend_instances.length; ++i) { |
| var backend_state = json.backend_instances[i]; |
| var instance_stats = backend_state.instance_stats; |
| for (var j = 0; j < instance_stats.length; ++j) { |
| var instance = instance_stats[j]; |
| instance.host = backend_state.host; |
| if (instance.done) instance.time_since_last_heard_from = ""; |
| if (!instance.first_status_update_received) { |
| instance.time_since_last_heard_from = ""; |
| } |
| delete instance.first_status_update_received; |
| result.push(instance); |
| } |
| } |
| return result; |
| } |
| |
| $(document).ready(function() { |
| table = $('#finstances').DataTable({ |
| ajax: { url: make_url("/query_finstances?query_id={{query_id}}&json"), |
| dataSrc: unpackJson, |
| }, |
| "columns": [ {data: 'host'}, |
| {data: 'fragment_name'}, |
| {data: 'instance_id'}, |
| {data: 'current_state'}, |
| {data: 'done'}, |
| {data: 'time_since_last_heard_from'}], |
| "order": [[ 0, "desc" ]], |
| "pageLength": 100 |
| }); |
| intervalId = setInterval(refresh, 1000); |
| }); |
| |
| function toggleRefresh() { |
| if (document.getElementById("toggle").checked === true) { |
| intervalId = setInterval(refresh, 1000); |
| document.getElementById("refresh_on").textContent = "Auto-refresh on"; |
| } else { |
| clearInterval(intervalId); |
| document.getElementById("refresh_on").textContent = "Auto-refresh off"; |
| } |
| } |
| |
| </script> |
| {{/backend_instances}} |
| |
| <div class="alert alert-info" role="alert" id="query_finished_alert" |
| style="visibility:hidden"> |
| Query <strong>{{query_id}}</strong> has completed, or has not started any backends, yet. |
| </div> |
| {{^backend_instances}} |
| <script>$("#query_finished_alert").css("visibility", "visible");</script> |
| {{/backend_instances}} |
| |
| <script> |
| $("#finstances-tab").addClass("active"); |
| </script> |
| |
| {{> www/common-footer.tmpl }} |