{{!
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.
}}
{{#no_replicas}}
There are no tablet replicas.
{{/no_replicas}}
{{#live_replicas}}
  <h3>Live Tablet Replicas</h3>
  <h4>Summary</h4>
  <table class='table table-striped table-hover'>
    <thead><tr><th>Status</th><th>Count</th><th>Percentage</th></tr></thead>
    <tbody>
    {{#statuses}}
      <tr><td>{{status}}</td><td>{{count}}</td><td>{{percentage}}</td></tr>
    {{/statuses}}
    </tbody>
    <tfoot><tr><td>Total</td><td>{{total_count}}</td><td></td></tfoot>
  </table>
  <h4>Detail</h4>
  <table data-toggle="table" data-pagination="true" data-search="true" class='table table-striped table-hover'>
    <thead>
      <tr>
        <th>Table name</th>
        <th>Tablet ID</th>
        <th>Partition</th>
        <th>State</th>
        <th data-sorter="bytesSorter" data-sortable="true">On-disk size</th>
        <th>RaftConfig</th>
      </tr>
    </thead>
    <tbody>
    {{#replicas}}
      <tr>
        <td>{{table_name}}</td>
        <td>
          {{#link}}<a href="{{base_url}}{{url}}">{{id}}</a>{{/link}}
          {{^link}}{{id}}{{/link}}
        </td>
        <td>{{partition}}</td>
        <td>{{state}}</td>
        <td>{{n_bytes}}</td>
        <td>{{{consensus_state_html}}}</td>
      </tr>
    {{/replicas}}
    </tbody>
  </table>
{{/live_replicas}}

{{#tombstoned_replicas}}
  <h3>Tombstoned Tablet Replicas</h3>
  <p><small>
    Tombstoned tablet replicas are necessary for correct operation of Kudu.
    These tablet replicas have had all of their data removed from disk and do
    not consume significant resources, and must not be deleted.
  </small></p>
  <h4>Summary</h4>
  <table class='table table-striped table-hover'>
    <thead><tr><th>Status</th><th>Count</th><th>Percentage</th></tr></thead>
    <tbody>
    {{#replica_statuses}}
      <tr><td>{{status}}</td><td>{{count}}</td><td>{{percentage}}</td></tr>
    {{/replica_statuses}}
    </tbody>
    <tfoot><tr><td>Total</td><td>{{total_count}}</td><td></td></tfoot>
  </table>
  <h4>Detail</h4>
  <table data-toggle="table" data-pagination="true" data-search="true" class='table table-striped table-hover'>
    <thead>
      <tr>
        <th>Table name</th>
        <th>Tablet ID</th>
        <th>Partition</th>
        <th>State</th>
        <th data-sorter="bytesSorter" data-sortable="true">On-disk size</th>
      </tr>
    </thead>
    <tbody>
    {{#replicas}}
      <tr>
        <td>{{table_name}}</td>
        <td>
          {{#link}}<a href="{{base_url}}{{url}}">{{id}}</a>{{/link}}
          {{^link}}{{id}}{{/link}}
        </td>
        <td>{{partition}}</td>
        <td>{{state}}</td>
        <td>{{n_bytes}}</td>
      </tr>
    {{/replicas}}
    </tbody>
  </table>
{{#tombstoned_replicas}}
