<!--
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>Queries</h2>
<p class="lead">This page lists all running queries, plus any completed queries that are
archived in memory. The size of that archive is controlled with the
<samp>--query_log_size</samp> command line parameter.</p>
<p>The length of the statements are controlled with the <samp>--query_stmt_size</samp>
command line parameter.</p>

<h3>{{num_executing_queries}} queries in flight</h3>

<table class='table table-hover table-border'>
  <tr>
    <th>User</th>
    <th>Default Db</th>
    <th>Statement</th>
    <th>Query Type</th>
    <th>Start Time</th>
    <th>Duration</th>
    <th>Scan Progress</th>
    <th>State</th>
    <th>Last Event</th>
    <th># rows fetched</th>
    <th>Resource Pool</th>
    <th>Details</th>
    <th>Action</th>
  </tr>
{{! filter to get just executing queries from in_flight_queries}}
{{#in_flight_queries}}
{{?executing}}
  <tr>
    <td>{{effective_user}}</td>
    <td>{{default_db}}</td>
    <td><samp>{{stmt}}</samp></td>
    <td><samp>{{stmt_type}}</samp></td>
    <td>{{start_time}}</td>
    <td>{{duration}}</td>
    <td>{{progress}}</td>
    <td><samp>{{state}}</samp></td>
    <td><samp>{{last_event}}</samp></td>
    <td>{{rows_fetched}}</td>
    <td>{{resource_pool}}</td>
    <td><a href='{{ __common__.host-url }}/query_plan?query_id={{query_id}}'>Details</a></td>
    <td><a href='{{ __common__.host-url }}/cancel_query?query_id={{query_id}}'>Cancel</a></td>
  </tr>
{{/executing}}
{{/in_flight_queries}}
</table>

<h3>
  {{num_waiting_queries}} waiting to be closed
  <sup><a href='#' data-toggle="tooltip" title="{{waiting-tooltip}}">[?]</a></sup>
</h3>

<table class='table table-hover table-border'>
  <tr>
    <th>User</th>
    <th>Default Db</th>
    <th>Statement</th>
    <th>Query Type</th>
    <th>Start Time</th>
    <th>Waiting Time</th>
    <th>Duration</th>
    <th>Scan Progress</th>
    <th>State</th>
    <th>Last Event</th>
    <th># rows fetched</th>
    <th>Resource Pool</th>
    <th>Details</th>
    <th>Action</th>
  </tr>
{{! filter to get just waiting queries from in_flight_queries}}
{{#in_flight_queries}}
{{?waiting}}
  <tr>
    <td>{{effective_user}}</td>
    <td>{{default_db}}</td>
    <td><samp>{{stmt}}</samp></td>
    <td><samp>{{stmt_type}}</samp></td>
    <td>{{start_time}}</td>
    <td>{{waiting_time}}</td>
    <td>{{duration}}</td>
    <td>{{progress}}</td>
    <td><samp>{{state}}</samp></td>
    <td><samp>{{last_event}}</samp></td>
    <td>{{rows_fetched}}</td>
    <td>{{resource_pool}}</td>
    <td><a href='{{ __common__.host-url }}/query_plan?query_id={{query_id}}'>Details</a></td>
    <td><a href='{{ __common__.host-url }}/cancel_query?query_id={{query_id}}'>Close</a></td>
  </tr>
{{/waiting}}
{{/in_flight_queries}}
</table>

<h3>Last {{completed_log_size}} Completed Queries</h3>

<table class='table table-hover table-border'>
  <tr>
    <th>User</th>
    <th>Default Db</th>
    <th>Statement</th>
    <th>Query Type</th>
    <th>Start Time</th>
    <th>End Time</th>
    <th>Duration</th>
    <th>Scan Progress</th>
    <th>State</th>
    <th># rows fetched</th>
    <th>Resource Pool</th>
    <th>Details</th>
  </tr>
{{#completed_queries}}
  <tr>
    <td>{{effective_user}}</td>
    <td>{{default_db}}</td>
    <td><samp>{{stmt}}</samp></td>
    <td><samp>{{stmt_type}}</samp></td>
    <td>{{start_time}}</td>
    <td>{{end_time}}</td>
    <td>{{duration}}</td>
    <td>{{progress}}</td>
    <td><samp>{{state}}</samp></td>
    <td>{{rows_fetched}}</td>
    <td>{{resource_pool}}</td>
    <td><a href='{{ __common__.host-url }}/query_plan?query_id={{query_id}}'>Details</a></td>
  </tr>
{{/completed_queries}}
</table>

<h3>Query Locations</h3>

<table class='table table-hover table-bordered'>
  <tr>
    <th>Location</th>
    <th>Backend Id</th>
    <th>Number of running queries with fragments on this host</th>
  </tr>
{{#query_locations}}
  <tr>
    <td>{{location}}</td>
    <td>{{backend_id}}</td>
    <td>{{count}}</td>
  </tr>
{{/query_locations}}
</table>

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