Update website
This commit is contained in:
parent
bb4b0f9be8
commit
011b183e28
4263 changed files with 3014 additions and 720369 deletions
|
@ -1,99 +0,0 @@
|
|||
{% extends 'server/status/base.twig' %}
|
||||
{% set active = 'advisor' %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<h2>{% trans 'Advisor system' %}</h2>
|
||||
|
||||
{% if data is empty %}
|
||||
{{ 'Not enough privilege to view the advisor.'|trans|error }}
|
||||
{% else %}
|
||||
<button type="button" class="btn btn-secondary mb-4" data-bs-toggle="modal" data-bs-target="#advisorInstructionsModal">
|
||||
{{ get_icon('b_help', 'Instructions'|trans) }}
|
||||
</button>
|
||||
|
||||
<div class="modal fade" id="advisorInstructionsModal" tabindex="-1" role="dialog" aria-labelledby="advisorInstructionsModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="advisorInstructionsModalLabel">{% trans 'Advisor system' %}</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="{% trans 'Close' %}"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>
|
||||
{%- trans -%}
|
||||
The Advisor system can provide recommendations on server variables by analyzing the server status variables.
|
||||
{%- endtrans -%}
|
||||
</p>
|
||||
<p>
|
||||
{%- trans -%}
|
||||
Do note however that this system provides recommendations based on simple calculations and by rule of thumb which may not necessarily apply to your system.
|
||||
{%- endtrans -%}
|
||||
</p>
|
||||
<p>
|
||||
{%- trans -%}
|
||||
Prior to changing any of the configuration, be sure to know what you are changing (by reading the documentation) and how to undo the change. Wrong tuning can have a very negative effect on performance.
|
||||
{%- endtrans -%}
|
||||
</p>
|
||||
<p>
|
||||
{%- trans -%}
|
||||
The best way to tune your system would be to change only one setting at a time, observe or benchmark your database, and undo the change if there was no clearly measurable improvement.
|
||||
{%- endtrans -%}
|
||||
</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-primary" data-bs-dismiss="modal">{% trans 'Close' %}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if data.errors|length > 0 %}
|
||||
<div class="alert alert-danger mt-2 mb-2" role="alert">
|
||||
<h4 class="alert-heading">{% trans 'Errors occurred while executing rule expressions:' %}</h4>
|
||||
<ul>
|
||||
{% for error in data.errors %}
|
||||
<li>{{ error }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if data.fired|length > 0 %}
|
||||
<h4>{% trans 'Possible performance issues' %}</h4>
|
||||
|
||||
<div class="accordion mb-4" id="rulesAccordion">
|
||||
{% for rule in data.fired %}
|
||||
<div class="accordion-item">
|
||||
<div class="accordion-header" id="heading{{ loop.index }}">
|
||||
<button class="accordion-button{{ not loop.first ? ' collapsed' }}" type="button" data-bs-toggle="collapse" data-bs-target="#collapse{{ loop.index }}" aria-expanded="{{ loop.first ? 'true' : 'false' }}" aria-controls="collapse{{ loop.index }}">
|
||||
{{ rule.issue|striptags }}
|
||||
</button>
|
||||
</div>
|
||||
<div id="collapse{{ loop.index }}" class="accordion-collapse collapse{{ loop.first ? ' show' }}" aria-labelledby="heading{{ loop.index }}" data-bs-parent="#rulesAccordion">
|
||||
<div class="accordion-body">
|
||||
<dl>
|
||||
<dt>{% trans 'Issue:' %}</dt>
|
||||
<dd>{{ rule.issue|raw }}</dd>
|
||||
|
||||
<dt>{% trans 'Recommendation:' %}</dt>
|
||||
<dd>{{ rule.recommendation|raw }}</dd>
|
||||
|
||||
<dt>{% trans 'Justification:' %}</dt>
|
||||
<dd>{{ rule.justification }}</dd>
|
||||
|
||||
<dt>{% trans 'Used variable / formula:' %}</dt>
|
||||
<dd>{{ rule.formula }}</dd>
|
||||
|
||||
<dt>{% trans 'Test:' %}</dt>
|
||||
<dd>{{ rule.test }}</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
|
@ -1,38 +0,0 @@
|
|||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<ul class="nav nav-pills m-2">
|
||||
<li class="nav-item">
|
||||
<a href="{{ url('/server/status') }}" class="nav-link{{ active == 'status' ? ' active' }}">
|
||||
{% trans 'Server' %}
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{{ url('/server/status/processes') }}" class="nav-link{{ active == 'processes' ? ' active' }}">
|
||||
{% trans 'Processes' %}
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{{ url('/server/status/queries') }}" class="nav-link{{ active == 'queries' ? ' active' }}">
|
||||
{% trans 'Query statistics' %}
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{{ url('/server/status/variables') }}" class="nav-link{{ active == 'variables' ? ' active' }}">
|
||||
{% trans 'All status variables' %}
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{{ url('/server/status/monitor') }}" class="nav-link{{ active == 'monitor' ? ' active' }}">
|
||||
{% trans 'Monitor' %}
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{{ url('/server/status/advisor') }}" class="nav-link{{ active == 'advisor' ? ' active' }}">
|
||||
{% trans 'Advisor' %}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
{% block content %}{% endblock %}
|
||||
</div>
|
|
@ -1,283 +0,0 @@
|
|||
{% 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 %}
|
|
@ -1,61 +0,0 @@
|
|||
{% extends 'server/status/base.twig' %}
|
||||
{% set active = 'processes' %}
|
||||
{% block content %}
|
||||
|
||||
<div class="card mb-3" id="tableFilter">
|
||||
<div class="card-header">{% trans 'Filters' %}</div>
|
||||
<div class="card-body">
|
||||
<form action="{{ url('/server/status/processes') }}" method="post" class="row row-cols-lg-auto gy-1 gx-3 align-items-center">
|
||||
{{ get_hidden_inputs(url_params) }}
|
||||
|
||||
<div class="col-12">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input autosubmit" type="checkbox" name="showExecuting" id="showExecuting"{{ is_checked ? ' checked' }}>
|
||||
<label class="form-check-label" for="showExecuting">{% trans 'Show only active' %}</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<input class="btn btn-secondary" type="submit" value="{% trans 'Refresh' %}">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{ server_process_list|raw }}
|
||||
|
||||
<div class="row">
|
||||
{{ 'Note: Enabling the auto refresh here might cause heavy traffic between the web server and the MySQL server.'|trans|notice }}
|
||||
</div>
|
||||
|
||||
<div class="tabLinks row">
|
||||
<label>
|
||||
{% trans 'Refresh rate' %}:
|
||||
|
||||
<select id="id_refreshRate" class="refreshRate" name="refreshRate">
|
||||
{% 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>
|
||||
</label>
|
||||
<a id="toggleRefresh" href="#">
|
||||
{{ get_image('play') }}
|
||||
{% trans 'Start auto refresh' %}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -1,85 +0,0 @@
|
|||
<div class="responsivetable row">
|
||||
<table id="tableprocesslist" class="table table-striped table-hover sortable w-auto">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{% trans 'Processes' %}</th>
|
||||
{% for column in columns %}
|
||||
<th scope="col">
|
||||
<a href="{{ url('/server/status/processes') }}" data-post="{{ get_common(column.params, '', false) }}" class="sortlink">
|
||||
{{ column.name }}
|
||||
{% if column.is_sorted %}
|
||||
<img class="icon ic_s_desc soimg" alt="
|
||||
{%- trans 'Descending' %}" src="themes/dot.gif" style="display: {{ column.sort_order == 'DESC' ? 'none' : 'inline' }}">
|
||||
<img class="icon ic_s_asc soimg hide" alt="
|
||||
{%- trans 'Ascending' %}" src="themes/dot.gif" style="display: {{ column.sort_order == 'DESC' ? 'inline' : 'none' }}">
|
||||
{% endif %}
|
||||
</a>
|
||||
{% if column.has_full_query %}
|
||||
<a href="{{ url('/server/status/processes') }}" data-post="{{ get_common(refresh_params, '', false) }}">
|
||||
{% if column.is_full %}
|
||||
{{ get_image(
|
||||
's_partialtext',
|
||||
'Truncate shown queries'|trans,
|
||||
{'class': 'icon_fulltext'}
|
||||
) }}
|
||||
{% else %}
|
||||
{{ get_image(
|
||||
's_fulltext',
|
||||
'Show full queries'|trans,
|
||||
{'class': 'icon_fulltext'}
|
||||
) }}
|
||||
{% endif %}
|
||||
</a>
|
||||
{% endif %}
|
||||
</th>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
{% for row in rows %}
|
||||
<tr>
|
||||
<td>
|
||||
<a class="ajax kill_process" href="{{ url('/server/status/processes/kill/' ~ row.id) }}" data-post="{{ get_common({'kill': row.id}, '', false) }}">
|
||||
{% trans 'Kill' %}
|
||||
</a>
|
||||
</td>
|
||||
<td class="font-monospace text-end">{{ row.id }}</td>
|
||||
<td>
|
||||
{% if row.user != 'system user' %}
|
||||
<a href="{{ url('/server/privileges', {
|
||||
'username': row.user,
|
||||
'hostname': row.host,
|
||||
'dbname': row.db,
|
||||
'tablename': '',
|
||||
'routinename': '',
|
||||
}) }}">
|
||||
{{ row.user }}
|
||||
</a>
|
||||
{% else %}
|
||||
{{ row.user }}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{{ row.host }}</td>
|
||||
<td>
|
||||
{% if row.db != '' %}
|
||||
<a href="{{ url('/database/structure', {
|
||||
'db': row.db,
|
||||
}) }}">
|
||||
{{ row.db }}
|
||||
</a>
|
||||
{% else %}
|
||||
<em>{% trans 'None' %}</em>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{{ row.command }}</td>
|
||||
<td class="font-monospace text-end">{{ row.time }}</td>
|
||||
<td>{{ row.state }}</td>
|
||||
{% if is_mariadb %}
|
||||
<td>{{ row.progress }}</td>
|
||||
{% endif %}
|
||||
<td>{{ row.info|raw }}</td>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
|
@ -1,62 +0,0 @@
|
|||
{% extends 'server/status/base.twig' %}
|
||||
{% set active = 'queries' %}
|
||||
{% block content %}
|
||||
|
||||
{% if is_data_loaded %}
|
||||
<div class="row">
|
||||
<h3 id="serverstatusqueries">
|
||||
{% trans %}
|
||||
Questions since startup:
|
||||
{% notes %}
|
||||
Questions is the name of a MySQL Status variable
|
||||
{% endtrans %}
|
||||
{{ format_number(stats.total, 0) }}
|
||||
{{ show_mysql_docu('server-status-variables', false, null, null, 'statvar_Questions') }}
|
||||
</h3>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<ul>
|
||||
<li>ø {% trans 'per hour:' %} {{ format_number(stats.per_hour, 0) }}</li>
|
||||
<li>ø {% trans 'per minute:' %} {{ format_number(stats.per_minute, 0) }}</li>
|
||||
{% if stats.per_second >= 1 %}
|
||||
<li>ø {% trans 'per second:' %} {{ format_number(stats.per_second, 0) }}</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<table id="serverStatusQueriesDetails" class="table table-striped table-hover sortable col-md-4 col-12 w-auto">
|
||||
<colgroup>
|
||||
<col class="namecol">
|
||||
<col class="valuecol" span="3">
|
||||
</colgroup>
|
||||
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">{% trans 'Statements' %}</th>
|
||||
<th class="text-end" scope="col">{% trans %}#{% notes %}# = Amount of queries{% endtrans %}</th>
|
||||
<th class="text-end" scope="col">{% trans 'ø per hour' %}</th>
|
||||
<th class="text-end" scope="col">%</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
{% for query in queries %}
|
||||
<tr>
|
||||
<th scope="row">{{ query.name }}</th>
|
||||
<td class="font-monospace text-end">{{ format_number(query.value, 5, 0, true) }}</td>
|
||||
<td class="font-monospace text-end">{{ format_number(query.per_hour, 4, 1, true) }}</td>
|
||||
<td class="font-monospace text-end">{{ format_number(query.percentage, 0, 2) }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div id="serverstatusquerieschart" class="w-100 col-12 col-md-6" data-chart="{{ chart|json_encode }}"></div>
|
||||
</div>
|
||||
{% else %}
|
||||
{{ 'Not enough privilege to view query statistics.'|trans|error }}
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
|
@ -1,78 +0,0 @@
|
|||
{% extends 'server/status/base.twig' %}
|
||||
{% set active = 'status' %}
|
||||
{% block content %}
|
||||
|
||||
{% if is_data_loaded %}
|
||||
<div class="row"><h3>{{ 'Network traffic since startup: %s'|trans|format(network_traffic) }}</h3></div>
|
||||
<div class="row"><p>{{ 'This MySQL server has been running for %1$s. It started up on %2$s.'|trans|format(uptime, start_time) }}</p></div>
|
||||
|
||||
<div class="row align-items-start">
|
||||
<table class="table table-striped table-hover col-12 col-md-5 w-auto">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">
|
||||
{% trans 'Traffic' %}
|
||||
{{ show_hint('On a busy server, the byte counters may overrun, so those statistics as reported by the MySQL server may be incorrect.'|trans) }}
|
||||
</th>
|
||||
<th class="text-end" scope="col">#</th>
|
||||
<th class="text-end" scope="col">{% trans 'ø per hour' %}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
{% for each_traffic in traffic %}
|
||||
<tr>
|
||||
<th scope="row">{{ each_traffic.name }}</th>
|
||||
<td class="font-monospace text-end">{{ each_traffic.number }}</td>
|
||||
<td class="font-monospace text-end">{{ each_traffic.per_hour }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<table class="table table-striped table-hover col-12 col-md-6 w-auto">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">{% trans 'Connections' %}</th>
|
||||
<th class="text-end" scope="col">#</th>
|
||||
<th class="text-end" scope="col">{% trans 'ø per hour' %}</th>
|
||||
<th class="text-end" scope="col">%</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
{% for connection in connections %}
|
||||
<tr>
|
||||
<th>{{ connection.name }}</th>
|
||||
<td class="font-monospace text-end">{{ connection.number }}</td>
|
||||
<td class="font-monospace text-end">{{ connection.per_hour }}</td>
|
||||
<td class="font-monospace text-end">{{ connection.percentage }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
{% if is_primary or is_replica %}
|
||||
<p class="alert alert-primary clearfloat" role="alert">
|
||||
{% if is_primary and is_replica %}
|
||||
{% trans 'This MySQL server works as <b>primary</b> and <b>replica</b> in <b>replication</b> process.' %}
|
||||
{% elseif is_primary %}
|
||||
{% trans 'This MySQL server works as <b>primary</b> in <b>replication</b> process.' %}
|
||||
{% elseif is_replica %}
|
||||
{% trans 'This MySQL server works as <b>replica</b> in <b>replication</b> process.' %}
|
||||
{% endif %}
|
||||
</p>
|
||||
|
||||
<hr class="clearfloat">
|
||||
|
||||
<h3>{% trans 'Replication status' %}</h3>
|
||||
|
||||
{{ replication|raw }}
|
||||
{% endif %}
|
||||
|
||||
{% else %}
|
||||
{{ 'Not enough privilege to view server status.'|trans|error }}
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
|
@ -1,142 +0,0 @@
|
|||
{% extends 'server/status/base.twig' %}
|
||||
{% set active = 'variables' %}
|
||||
{% block content %}
|
||||
|
||||
{% if is_data_loaded %}
|
||||
<div class="card mb-3" id="tableFilter">
|
||||
<div class="card-header">{% trans 'Filters' %}</div>
|
||||
<div class="card-body">
|
||||
<form action="{{ url('/server/status/variables') }}" method="post" class="row row-cols-lg-auto g-3 align-items-center">
|
||||
{{ get_hidden_inputs() }}
|
||||
|
||||
<label class="col-12 col-form-label" for="filterText">{% trans 'Containing the word:' %}</label>
|
||||
<div class="col-12">
|
||||
<input class="form-control" name="filterText" type="text" id="filterText" value="{{ filter_text }}">
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" name="filterAlert" id="filterAlert"{{ is_only_alerts ? ' checked' }}>
|
||||
<label class="form-check-label" for="filterAlert">{% trans 'Show only alert values' %}</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<label class="visually-hidden" for="filterCategory">{% trans 'Filter by category…' %}</label>
|
||||
<select class="form-select" id="filterCategory" name="filterCategory">
|
||||
<option value="">{% trans 'Filter by category…' %}</option>
|
||||
{% for category in categories %}
|
||||
<option value="{{ category.id }}"{{ category.is_selected ? ' selected' }}>{{ category.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" name="dontFormat" id="dontFormat"{{ is_not_formatted ? ' checked' }}>
|
||||
<label class="form-check-label" for="dontFormat">{% trans 'Show unformatted values' %}</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-12">
|
||||
<input class="btn btn-secondary" type="submit" value="{% trans 'Refresh' %}">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="linkSuggestions" class="defaultLinks hide">
|
||||
<p class="alert alert-primary" role="alert">
|
||||
{% trans 'Related links:' %}
|
||||
{% for link in links %}
|
||||
<span class="{{ link.name }}">
|
||||
{% for link_name, link_url in link.links %}
|
||||
{% if link_name == 'doc' %}
|
||||
{{ show_mysql_docu(link_url) }}
|
||||
{% else %}
|
||||
<a href="{{ link_url.url }}"{% if link_url.params is not empty %} data-post="{{ link_url.params }}"{% endif %}>{{ link_name }}</a>
|
||||
{% endif %}
|
||||
|
|
||||
{% endfor %}
|
||||
</span>
|
||||
{% endfor %}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="responsivetable row">
|
||||
<table class="table table-striped table-hover table-sm" id="serverStatusVariables">
|
||||
<colgroup>
|
||||
<col class="namecol">
|
||||
<col class="valuecol">
|
||||
<col class="descrcol">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">{% trans 'Variable' %}</th>
|
||||
<th scope="col">{% trans 'Value' %}</th>
|
||||
<th scope="col">{% trans 'Description' %}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for variable in variables %}
|
||||
<tr{% if variable.class is not empty %} class="s_{{ variable.class }}"{% endif %}>
|
||||
<th class="name">
|
||||
{{ variable.name|replace({'_': ' '}) }}
|
||||
{{ variable.doc|raw }}
|
||||
</th>
|
||||
|
||||
<td class="value font-monospace text-end">
|
||||
<span class="formatted">
|
||||
{% if variable.has_alert %}
|
||||
<span class="{{ variable.is_alert ? 'text-danger' : 'text-success' }}">
|
||||
{% endif %}
|
||||
|
||||
{% if variable.name ends with '%' %}
|
||||
{{ format_number(variable.value, 0, 2) }} %
|
||||
{% elseif 'Uptime' in variable.name %}
|
||||
{{ timespan_format(variable.value) }}
|
||||
{% elseif variable.is_numeric and variable.value >= 1000 %}
|
||||
<abbr title="{{ format_number(variable.value, 0) }}">
|
||||
{{ format_number(variable.value, 3, 1) }}
|
||||
</abbr>
|
||||
{% elseif variable.is_numeric %}
|
||||
{{ format_number(variable.value, 3, 1) }}
|
||||
{% else %}
|
||||
{{ variable.value }}
|
||||
{% endif %}
|
||||
|
||||
{% if variable.has_alert %}
|
||||
</span>
|
||||
{% endif %}
|
||||
</span>
|
||||
<span class="original hide">
|
||||
{% if variable.has_alert %}
|
||||
<span class="{{ variable.is_alert ? 'text-danger' : 'text-success' }}">
|
||||
{% endif %}
|
||||
{{ variable.value }}
|
||||
{% if variable.has_alert %}
|
||||
</span>
|
||||
{% endif %}
|
||||
</span>
|
||||
</td>
|
||||
|
||||
<td class="w-50">
|
||||
{{ variable.description }}
|
||||
{% for doc in variable.description_doc %}
|
||||
{% if doc.name == 'doc' %}
|
||||
{{ show_mysql_docu(doc.url) }}
|
||||
{% else %}
|
||||
<a href="{{ doc.url.url }}" data-post="{{ doc.url.params }}">{{ doc.name }}</a>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% else %}
|
||||
{{ 'Not enough privilege to view status variables.'|trans|error }}
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
Loading…
Add table
Add a link
Reference in a new issue