<!--
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>Sessions</h2>

<div class="alert alert-info" role="alert">
<h4>There are {{num_sessions}} sessions, of which {{num_active}} are active and
{{num_inactive}} are inactive</h4>
Active sessions are sessions that have not yet been expired or closed. Sessions are
expired by the Impala server when they are idle for some time (see Idle Timeout
below). Sessions can be closed in several ways: closed by the client, closed by this Web
UI or closed by the Impala after all client connections are disconnected and
-disconnected_session_timeout is exceeded. Sessions stay in the closed state
temporarily while queries in the session are cleaned up by the Impala server, after
which the session is removed from this list.</div>

<table id="sessions-tbl" class='table table-bordered table-hover table-condensed'>
  <thead>
    <tr>
      <th><small>Session Type</small></th>
      <th><small>Open Queries</small></th>
      <th><small>Total Queries</small></th>
      <th><small>User</small></th>
      <th><small>Delegated User</small></th>
      <th><small>Session ID</small></th>
      <th><small>Network Address</small></th>
      <th><small>Default Database</small></th>
      <th><small>Start Time</small></th>
      <th><small>Last Accessed</small></th>
      <th><small>Idle Timeout (s)</small></th>
      <th><small>Expired</small></th>
      <th><small>Closed</small></th>
      <th><small>Ref count</small></th>
      <th><small>Action</small></th>
    </tr>
  </thead>
  <tbody>
    {{#sessions}}
    <tr>
      <td><small>{{type}}</small></td>
      <td><small>{{inflight_queries}}</small></td>
      <td><small>{{total_queries}}</small></td>
      <td><small>{{user}}</small></td>
      <td><small>{{delegated_user}}</small></td>
      <td><small>{{session_id}}</small></td>
      <td><small>{{network_address}}</small></td>
      <td><small>{{default_database}}</small></td>
      <td data-order="{{start_time_sort}}"><small>{{start_time}}</small></td>
      <td data-order="{{last_accessed_sort}}"><small>{{last_accessed}}</small></td>
      <td><small>{{session_timeout}}</small></td>
      <td><small>{{expired}}</small></td>
      <td><small>{{closed}}</small></td>
      <td><small>{{ref_count}}</small></td>
      <td><small><a href='{{ __common__.host-url }}/close_session?session_id={{session_id}}'>Close</a></small></td>
    </tr>
    {{/sessions}}
  </tbody>
</table>

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

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