284 lines
9.8 KiB
Twig
284 lines
9.8 KiB
Twig
{% extends 'server/status/base.twig' %}
|
|
{% set active = 'monitor' %}
|
|
{% block content %}
|
|
|
|
<div class="tabLinks row">
|
|
<a href="#pauseCharts">
|
|
{{ get_image('play') }}
|
|
{%- trans 'Start Monitor' -%}
|
|
</a>
|
|
<a href="#settingsPopup" class="popupLink">
|
|
{{ get_image('s_cog') }}
|
|
{%- trans 'Settings' -%}
|
|
</a>
|
|
<a href="#monitorInstructionsDialog">
|
|
{{ get_image('b_help') }}
|
|
{%- trans 'Instructions/Setup' -%}
|
|
</a>
|
|
<a href="#endChartEditMode" class="hide">
|
|
{{ get_image('s_okay') }}
|
|
{%- trans 'Done dragging (rearranging) charts' -%}
|
|
</a>
|
|
</div>
|
|
|
|
<div class="popupContent settingsPopup">
|
|
<a href="#addNewChart">
|
|
{{ get_image('b_chart') }}
|
|
{% trans 'Add chart' %}
|
|
</a>
|
|
<a href="#rearrangeCharts">
|
|
{{ get_image('b_tblops') }}
|
|
{% trans 'Enable charts dragging' %}
|
|
</a>
|
|
<div class="clearfloat paddingtop"></div>
|
|
|
|
<div class="float-start">
|
|
{% trans 'Refresh rate' %}
|
|
<br>
|
|
<select id="id_gridChartRefresh" class="refreshRate" name="gridChartRefresh">
|
|
{% for rate in [2, 3, 4, 5, 10, 20, 40, 60, 120, 300, 600, 1200] %}
|
|
<option value="{{ rate }}"{{ rate == 5 ? ' selected' }}>
|
|
{% if rate < 60 %}
|
|
{% if rate == 1 %}
|
|
{{ '%d second'|trans|format(rate) }}
|
|
{% else %}
|
|
{{ '%d seconds'|trans|format(rate) }}
|
|
{% endif %}
|
|
{% else %}
|
|
{% if rate / 60 == 1 %}
|
|
{{ '%d minute'|trans|format(rate / 60) }}
|
|
{% else %}
|
|
{{ '%d minutes'|trans|format(rate / 60) }}
|
|
{% endif %}
|
|
{% endif %}
|
|
</option>
|
|
{% endfor %}
|
|
</select>
|
|
<br>
|
|
</div>
|
|
|
|
<div class="float-start">
|
|
{% trans 'Chart columns' %}
|
|
<br>
|
|
<select name="chartColumns">
|
|
<option>1</option>
|
|
<option>2</option>
|
|
<option>3</option>
|
|
<option>4</option>
|
|
<option>5</option>
|
|
<option>6</option>
|
|
</select>
|
|
</div>
|
|
|
|
<div class="clearfloat paddingtop">
|
|
<strong>{% trans 'Chart arrangement' %}</strong>
|
|
{{ show_hint('The arrangement of the charts is stored to the browsers local storage. You may want to export it if you have a complicated set up.'|trans) }}
|
|
<br>
|
|
<a class="ajax" href="#importMonitorConfig">
|
|
{% trans 'Import' %}
|
|
</a> -
|
|
<a class="disableAjax" href="#exportMonitorConfig">
|
|
{% trans 'Export' %}
|
|
</a> -
|
|
<a href="#clearMonitorConfig">
|
|
{% trans 'Reset to default' %}
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="monitorInstructionsDialog" title="{% trans 'Monitor Instructions' %}" class="hide">
|
|
<p>
|
|
{% trans %}
|
|
The phpMyAdmin Monitor can assist you in optimizing the server configuration and track down time intensive queries. For the latter you will need to set log_output to 'TABLE' and have either the slow_query_log or general_log enabled. Note however, that the general_log produces a lot of data and increases server load by up to 15%.
|
|
{% endtrans %}
|
|
</p>
|
|
<img class="ajaxIcon" src="{{ image('ajax_clock_small.gif') }}" alt="{% trans 'Loading…' %}">
|
|
|
|
<div class="ajaxContent"></div>
|
|
<br>
|
|
|
|
<div class="monitorUse hide">
|
|
<p><strong>{% trans 'Using the monitor:' %}</strong></p>
|
|
<p>
|
|
{% trans %}
|
|
Your browser will refresh all displayed charts in a regular interval. You may add charts and change the refresh rate under 'Settings', or remove any chart using the cog icon on each respective chart.
|
|
{% endtrans %}
|
|
</p>
|
|
<p>
|
|
{% trans %}
|
|
To display queries from the logs, select the relevant time span on any chart by holding down the left mouse button and panning over the chart. Once confirmed, this will load a table of grouped queries, there you may click on any occurring SELECT statements to further analyze them.
|
|
{% endtrans %}
|
|
</p>
|
|
<p>
|
|
{{ get_image('s_attention') }}
|
|
<strong>{% trans 'Please note:' %}</strong>
|
|
</p>
|
|
<p>
|
|
{% trans %}
|
|
Enabling the general_log may increase the server load by 5-15%. Also be aware that generating statistics from the logs is a load intensive task, so it is advisable to select only a small time span and to disable the general_log and empty its table once monitoring is not required any more.
|
|
{% endtrans %}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="modal fade" id="addChartModal" tabindex="-1" aria-labelledby="addChartModalLabel" aria-hidden="true">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title" id="addChartModalLabel">{% trans 'Chart Title' %}</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="{% trans 'Close' %}"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<div id="tabGridVariables">
|
|
<p>
|
|
<input type="text" name="chartTitle" value="{% trans 'Chart Title' %}">
|
|
</p>
|
|
<input type="radio" name="chartType" value="preset" id="chartPreset">
|
|
|
|
<label for="chartPreset">{% trans 'Preset chart' %}</label>
|
|
<select name="presetCharts"></select>
|
|
<br>
|
|
|
|
<input type="radio" name="chartType" value="variable" id="chartStatusVar" checked="checked">
|
|
<label for="chartStatusVar">
|
|
{% trans 'Status variable(s)' %}
|
|
</label>
|
|
<br>
|
|
|
|
<div id="chartVariableSettings">
|
|
<label for="chartSeries">{% trans 'Select series:' %}</label>
|
|
<br>
|
|
<select id="chartSeries" name="varChartList" size="1">
|
|
<option>{% trans 'Commonly monitored' %}</option>
|
|
<option>Processes</option>
|
|
<option>Questions</option>
|
|
<option>Connections</option>
|
|
<option>Bytes_sent</option>
|
|
<option>Bytes_received</option>
|
|
<option>Threads_connected</option>
|
|
<option>Created_tmp_disk_tables</option>
|
|
<option>Handler_read_first</option>
|
|
<option>Innodb_buffer_pool_wait_free</option>
|
|
<option>Key_reads</option>
|
|
<option>Open_tables</option>
|
|
<option>Select_full_join</option>
|
|
<option>Slow_queries</option>
|
|
</select>
|
|
<br>
|
|
|
|
<label for="variableInput">
|
|
{% trans 'or type variable name:' %}
|
|
</label>
|
|
<input type="text" name="variableInput" id="variableInput">
|
|
<br>
|
|
|
|
<input type="checkbox" name="differentialValue" id="differentialValue" value="differential" checked="checked">
|
|
<label for="differentialValue">
|
|
{% trans 'Display as differential value' %}
|
|
</label>
|
|
<br>
|
|
|
|
<input type="checkbox" id="useDivisor" name="useDivisor" value="1">
|
|
<label for="useDivisor">{% trans 'Apply a divisor' %}</label>
|
|
|
|
<span class="divisorInput hide">
|
|
<input type="text" name="valueDivisor" size="4" value="1">
|
|
(<a href="#kibDivisor">{% trans 'KiB' %}</a>,
|
|
<a href="#mibDivisor">{% trans 'MiB' %}</a>)
|
|
</span>
|
|
<br>
|
|
|
|
<input type="checkbox" id="useUnit" name="useUnit" value="1">
|
|
<label for="useUnit">
|
|
{% trans 'Append unit to data values' %}
|
|
</label>
|
|
<span class="unitInput hide">
|
|
<input type="text" name="valueUnit" size="4" value="">
|
|
</span>
|
|
|
|
<p>
|
|
<a href="#submitAddSeries">
|
|
<strong>{% trans 'Add this series' %}</strong>
|
|
</a>
|
|
<span id="clearSeriesLink" class="hide">
|
|
| <a href="#submitClearSeries">{% trans 'Clear series' %}</a>
|
|
</span>
|
|
</p>
|
|
|
|
{% trans 'Series in chart:' %}
|
|
<br>
|
|
<span id="seriesPreview">
|
|
<em>{% trans 'None' %}</em>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-secondary" id="addChartButton" data-bs-dismiss="modal">{% trans 'Add chart to grid' %}</button>
|
|
<button type="button" class="btn btn-secondary" id="closeModalButton" data-bs-dismiss="modal">{% trans 'Close' %}</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="logAnalyseDialog" title="{% trans 'Log statistics' %}" class="hide">
|
|
<p>
|
|
{% trans 'Selected time range:' %}
|
|
<input type="text" name="dateStart" class="datetimefield" value="">
|
|
-
|
|
<input type="text" name="dateEnd" class="datetimefield" value="">
|
|
</p>
|
|
|
|
<input type="checkbox" id="limitTypes" value="1" checked="checked">
|
|
<label for="limitTypes">
|
|
{% trans 'Only retrieve SELECT,INSERT,UPDATE and DELETE Statements' %}
|
|
</label>
|
|
<br>
|
|
|
|
<input type="checkbox" id="removeVariables" value="1" checked="checked">
|
|
<label for="removeVariables">
|
|
{% trans 'Remove variable data in INSERT statements for better grouping' %}
|
|
</label>
|
|
|
|
<p>
|
|
{% trans 'Choose from which log you want the statistics to be generated from.' %}
|
|
</p>
|
|
<p>
|
|
{% trans 'Results are grouped by query text.' %}
|
|
</p>
|
|
</div>
|
|
|
|
<div id="queryAnalyzerDialog" title="{% trans 'Query analyzer' %}" class="hide">
|
|
<textarea id="sqlquery"></textarea>
|
|
<br>
|
|
<div class="placeHolder"></div>
|
|
</div>
|
|
|
|
<div class="clearfloat"></div>
|
|
<div class="row"><table class="clearfloat tdblock" id="chartGrid"></table></div>
|
|
<div id="logTable"><br></div>
|
|
|
|
<script type="text/javascript">
|
|
var variableNames = [
|
|
{% for variable_name in javascript_variable_names %}
|
|
"{{ variable_name|e('js') }}",
|
|
{% endfor %}
|
|
];
|
|
</script>
|
|
|
|
<form id="js_data" class="hide">
|
|
{% for name, value in form %}
|
|
<input type="hidden" name="{{ name }}" value="{{ value }}">
|
|
{% endfor %}
|
|
</form>
|
|
|
|
<div id="profiling_docu" class="hide">
|
|
{{ show_mysql_docu('general-thread-states') }}
|
|
</div>
|
|
|
|
<div id="explain_docu" class="hide">
|
|
{{ show_mysql_docu('explain-output') }}
|
|
</div>
|
|
|
|
{% endblock %}
|