{{!
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.
}}
{{#error}}
  <div class="text-error">{{.}}</div>
{{/error}}
{{^error}}
  <h2>Tablet Servers</h2>
  <p>There are {{num_ts}} registered tablet servers.</p>
  <h3>Version Summary</h3>
  <table class='table table-striped'>
    <thead><tr>
      <th>Version</th>
      <th>Count (Live)</th>
      <th>Count (Dead)</th>
    </tr></thead>
    <tbody>
    {{#version_counts}}
    <tr>
      <td>{{version}}</td>
      <td>{{live}}</td>
      <td>{{dead}}</td>
    </tr>
    {{/version_counts}}
    </tbody>
  </table>
  <h3>Registrations</h3>
  {{^has_no_live_ts}}
  <h4>Live Tablet Servers</h4>
  <table class='table table-striped'>
    <thead><tr>
      <th>UUID</th>
      <th>Location</th>
      <th>Time since heartbeat</th>
      <th>Registration</th>
    </tr></thead>
    <tbody>
    {{#live_tservers}}
      <tr>
        <td>{{#target}}<a href="{{.}}">{{/target}}{{uuid}}{{#target}}</a>{{/target}}</td>
        <td>{{location}}</td>
        <td>{{time_since_hb}}</td>
        <td><pre><code>{{registration}}</code></pre></td>
      </tr>
    {{/live_tservers}}
    </tbody>
  </table>
  {{/has_no_live_ts}}
  {{^has_no_dead_ts}}
    <h4>Dead Tablet Servers</h4>
    <table class='table table-striped'>
      <thead><tr>
        <th>UUID</th>
        <th>Time since heartbeat</th>
        <th>Registration</th>
      </tr></thead>
    <tbody>
    {{#dead_tservers}}
      <tr>
        <td>{{#target}}<a href="{{.}}">{{/target}}{{uuid}}{{#target}}</a>{{/target}}</td>
        <td>{{time_since_hb}}</td>
        <td><pre><code>{{registration}}</code></pre></td>
      </tr>
    {{/dead_tservers}}
    </tbody>
    </table>
  {{/has_no_dead_ts}}
{{/error}}
