<!--
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>Catalog operations</h2>

<div class="panel panel-info">
<div class="card">
  <div class="card-header">
      <h5 class="card-title">
      In-progress Catalog Operations Summary
      </h5>
  </div>
  <div class="card-body">
    <table id=summary class='table table-hover table-bordered'>
      <thead>
        <tr>
          <th>Operation</th>
          <th>Number of requests</th>
        </tr>
      </thead>
      <tbody>
        {{#catalog_op_summary}}
        <tr>
          <td>{{catalog_op_name}}</td>
          <td>{{op_counter}}</td>
        </tr>
        {{/catalog_op_summary}}
      </tbody>
    </table>
  </div>
</div>

<script>
    $(document).ready(function() {
        $('#summary').DataTable({
            "order": [[ 1, "desc" ]],
            "pageLength": 10
        });
    });
</script>

<div class="panel panel-info">
<div class="card">
  <div class="card-header">
      <h5 class="card-title">
      In-progress Catalog Operations
      </h5>
  </div>
  <div class="card-body">
    <table id=operations class='table table-hover table-bordered'>
      <thead>
        <tr>
          <th>Table</th>
          <th>Number of requests</th>
          <th>Operations</th>
        </tr>
      </thead>
      <tbody>
        {{#catalog_op_list}}
        <tr>
          <td>{{table_name}}</td>
          <td>{{op_counter}}</td>
          <td>{{catalog_op_name}}</td>
        </tr>
        {{/catalog_op_list}}
      </tbody>
    </table>
  </div>
</div>

<script>
    $(document).ready(function() {
        $('#operations').DataTable({
            "order": [[ 1, "desc" ]],
            "pageLength": 10
        });
    });
</script>

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