<!--
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 }}

<h2>Active backend(s): {{num_active_backends}}</h2>

<table id="backends" class='table table-hover table-bordered table-responsive'>
  <thead>
    <tr>
      <th></th>
      <th>Address</th>
      <th>Krpc Address</th>
      <th>Backend Id</th>
      <th>Version</th>
      <th>Process Start Time</th>
      <th>Coordinator</th>
      <th>Executor</th>
      <th>Memory Limit for Admission</th>
      <th>Memory Reserved</th>
      <th>Memory Admitted by Queries Submitted to this Coordinator</th>
      <th>Admission Control Slots In Use</th>
      <th>Num. Queries Admitted by this Coordinator</th>
      <th>Executor Groups</th>
    </tr>
  </thead>
  <tbody>
    {{#backends}}
    {{?is_active}}
    <tr>
      <td><a href='{{webserver_url}}'>Web UI</a></td>
      <td>{{address}}</td>
      <td>{{krpc_address}}</td>
      <td>{{backend_id}}</td>
      <td>{{version}}</td>
      <td>{{process_start_time}}</td>
      <td>{{is_coordinator}}</td>
      <td>{{is_executor}}</td>
      <td>{{admit_mem_limit}}</td>
      <td>{{mem_reserved}}</td>
      <td>{{mem_admitted}}</td>
      <td>{{admission_slots_in_use}}/{{admission_slots}}</td>
      <td>{{num_admitted}}</td>
      <td>{{executor_groups}}</td>
    </tr>
    {{/is_active}}
    {{/backends}}
  </tbody>
</table>

{{#num_quiescing_backends}}
<h2>Quiescing backend(s)<sup><a href='#' data-toggle="tooltip" title="{{> www/quiescing_tooltip.txt }}">[?]</a></sup>: {{num_quiescing_backends}}</h2>

<table id="quiescing_backends" class='table table-hover table-bordered table-responsive'>
  <thead>
    <tr>
      <th></th>
      <th>Address</th>
      <th>Krpc Address</th>
      <th>Backend Id</th>
      <th>Version</th>
      <th>Process Start Time</th>
      <th>Coordinator</th>
      <th>Executor</th>
      <th>Memory Limit for Admission</th>
      <th>Memory Reserved</th>
      <th>Memory Admitted by Queries Submitted to this Coordinator</th>
      <th>Admission Control Slots In Use</th>
      <th>Num. Queries Admitted by this Coordinator</th>
      <th>Executor Groups</th>
    </tr>
  </thead>
  <tbody>
    {{#backends}}
    {{?is_quiescing}}
    <tr>
      <td><a href='{{webserver_url}}'>Web UI</a></td>
      <td>{{address}}</td>
      <td>{{krpc_address}}</td>
      <td>{{backend_id}}</td>
      <td>{{version}}</td>
      <td>{{process_start_time}}</td>
      <td>{{is_coordinator}}</td>
      <td>{{is_executor}}</td>
      <td>{{admit_mem_limit}}</td>
      <td>{{mem_reserved}}</td>
      <td>{{mem_admitted}}</td>
      <td>{{admission_slots_in_use}}/{{admission_slots}}</td>
      <td>{{num_admitted}}</td>
      <td>{{executor_groups}}</td>
    </tr>
    {{/is_quiescing}}
    {{/backends}}
  </tbody>
</table>
{{/num_quiescing_backends}}

{{#num_blacklisted_backends}}
<h2>Blacklisted backend(s)<sup><a href='#' data-toggle="tooltip" title="{{> www/blacklisted_tooltip.txt }}">[?]</a></sup>: {{num_blacklisted_backends}}</h2>

<table id="blacklisted_backends" class='table table-hover table-bordered table-responsive'>
  <thead>
    <tr>
      <th></th>
      <th>Address</th>
      <th>Krpc Address</th>
      <th>Backend Id</th>
      <th>Version</th>
      <th>Process Start Time</th>
      <th>Blacklisting Cause</th>
      <th>Time remaining on blacklist</th>
      <th>Coordinator</th>
      <th>Executor</th>
      <th>Memory Limit for Admission</th>
      <th>Memory Reserved</th>
      <th>Memory Admitted by Queries Submitted to this Coordinator</th>
      <th>Admission Control Slots In Use</th>
      <th>Num. Queries Admitted by this Coordinator</th>
      <th>Executor Groups</th>
    </tr>
  </thead>
  <tbody>
    {{#backends}}
    {{?is_blacklisted}}
    <tr>
      <td><a href='{{webserver_url}}'>Web UI</a></td>
      <td>{{address}}</td>
      <td>{{krpc_address}}</td>
      <td>{{backend_id}}</td>
      <td>{{version}}</td>
      <td>{{process_start_time}}</td>
      <td>{{blacklist_cause}}</td>
      <td>{{blacklist_time_remaining}}</td>
      <td>{{is_coordinator}}</td>
      <td>{{is_executor}}</td>
      <td>{{admit_mem_limit}}</td>
      <td>{{mem_reserved}}</td>
      <td>{{mem_admitted}}</td>
      <td>{{admission_slots_in_use}}/{{admission_slots}}</td>
      <td>{{num_admitted}}</td>
      <td>{{executor_groups}}</td>
    </tr>
    {{/is_blacklisted}}
    {{/backends}}
  </tbody>
</table>
{{/num_blacklisted_backends}}

<script>
    $(document).ready(function() {
        $('#backends').DataTable({
            "order": [[ 0, "desc" ]],
            "pageLength": 100
        });
    });
    $(document).ready(function() {
        $('#quiescing_backends').DataTable({
            "order": [[ 0, "desc" ]],
            "pageLength": 100
        });
    });
    $(document).ready(function() {
        $('#blacklisted_backends').DataTable({
            "order": [[ 0, "desc" ]],
            "pageLength": 100
        });
    });
</script>

{{> www/common-footer.tmpl}}
