mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-27 04:28:44 +02:00
N°6934 - Symfony 6.4 - upgrade Symfony bundles to 6.4 (#580)
* Update Symfony lib to version ~6.4.0 * Update code missing return type * Add an iTop general configuration entry to store application secret (Symfony mandatory parameter) * Use dependency injection in ExceptionListener & UserProvider classes
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
{% block toolbar %}
|
||||
{% if collector.totals.calls > 0 %}
|
||||
{% set icon %}
|
||||
{{ include('@WebProfiler/Icon/cache.svg') }}
|
||||
{{ source('@WebProfiler/Icon/cache.svg') }}
|
||||
<span class="sf-toolbar-value">{{ collector.totals.calls }}</span>
|
||||
<span class="sf-toolbar-info-piece-additional-detail">
|
||||
<span class="sf-toolbar-label">in</span>
|
||||
@@ -36,92 +36,47 @@
|
||||
|
||||
{% block menu %}
|
||||
<span class="label {{ collector.totals.calls == 0 ? 'disabled' }}">
|
||||
<span class="icon">
|
||||
{{ include('@WebProfiler/Icon/cache.svg') }}
|
||||
<span class="icon">
|
||||
{{ source('@WebProfiler/Icon/cache.svg') }}
|
||||
</span>
|
||||
<strong>Cache</strong>
|
||||
</span>
|
||||
<strong>Cache</strong>
|
||||
</span>
|
||||
{% endblock %}
|
||||
|
||||
{% block panel %}
|
||||
<h2>Cache</h2>
|
||||
|
||||
{% if collector.totals.calls == 0 %}
|
||||
<div class="empty">
|
||||
<div class="empty empty-panel">
|
||||
<p>No cache calls were made.</p>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="metrics">
|
||||
<div class="metric">
|
||||
<span class="value">{{ collector.totals.calls }}</span>
|
||||
<span class="label">Total calls</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="value">{{ '%0.2f'|format(collector.totals.time * 1000) }} <span class="unit">ms</span></span>
|
||||
<span class="label">Total time</span>
|
||||
</div>
|
||||
<div class="metric-divider"></div>
|
||||
<div class="metric">
|
||||
<span class="value">{{ collector.totals.reads }}</span>
|
||||
<span class="label">Total reads</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="value">{{ collector.totals.writes }}</span>
|
||||
<span class="label">Total writes</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="value">{{ collector.totals.deletes }}</span>
|
||||
<span class="label">Total deletes</span>
|
||||
</div>
|
||||
<div class="metric-divider"></div>
|
||||
<div class="metric">
|
||||
<span class="value">{{ collector.totals.hits }}</span>
|
||||
<span class="label">Total hits</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="value">{{ collector.totals.misses }}</span>
|
||||
<span class="label">Total misses</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="value">
|
||||
{{ collector.totals.hit_read_ratio ?? 0 }} <span class="unit">%</span>
|
||||
</span>
|
||||
<span class="label">Hits/reads</span>
|
||||
</div>
|
||||
</div>
|
||||
{{ _self.render_metrics(collector.totals, true) }}
|
||||
|
||||
<h2>Pools</h2>
|
||||
<div class="sf-tabs">
|
||||
{% for name, calls in collector.calls %}
|
||||
{# the empty merge is needed to turn the iterator into an array #}
|
||||
{% set cache_pools_with_calls = collector.calls|filter(calls => calls|length > 0)|merge([]) %}
|
||||
{% for name, calls in cache_pools_with_calls %}
|
||||
<div class="tab {{ calls|length == 0 ? 'disabled' }}">
|
||||
<h3 class="tab-title">{{ name }} <span class="badge">{{ collector.statistics[name].calls }}</span></h3>
|
||||
|
||||
<div class="tab-content">
|
||||
<h4>Adapter</h4>
|
||||
<div class="card">
|
||||
{% if collector.adapters[name] is defined %}
|
||||
<code>{{ collector.adapters[name] }}</code>
|
||||
{% else %}
|
||||
<span class="text-muted">Unable to get the adapter class.</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% if calls|length == 0 %}
|
||||
<div class="empty">
|
||||
<p>No calls were made for {{ name }} pool.</p>
|
||||
</div>
|
||||
{% else %}
|
||||
<h4>Metrics</h4>
|
||||
<div class="metrics">
|
||||
{% for key, value in collector.statistics[name] %}
|
||||
<div class="metric">
|
||||
<span class="value">
|
||||
{% if key == 'time' %}
|
||||
{{ '%0.2f'|format(1000 * value) }} <span class="unit">ms</span>
|
||||
{% elseif key == 'hit_read_ratio' %}
|
||||
{{ value ?? 0 }} <span class="unit">%</span>
|
||||
{% else %}
|
||||
{{ value }}
|
||||
{% endif %}
|
||||
</span>
|
||||
<span class="label">{{ key == 'hit_read_ratio' ? 'Hits/reads' : key|capitalize }}</span>
|
||||
</div>
|
||||
{% if key == 'time' or key == 'deletes' %}
|
||||
<div class="metric-divider"></div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{{ _self.render_metrics(collector.statistics[name]) }}
|
||||
|
||||
<h4>Calls</h4>
|
||||
<table>
|
||||
@@ -147,7 +102,77 @@
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if loop.last %}
|
||||
<div class="tab">
|
||||
<h3 class="tab-title">Pools without calls <span class="badge">{{ collector.calls|filter(calls => 0 == calls|length)|length }}</span></h3>
|
||||
|
||||
<div class="tab-content">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Cache pools that received no calls</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for cache_pool in collector.calls|filter(calls => 0 == calls|length)|keys|sort %}
|
||||
<tr><td>{{ cache_pool }}</td></tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% macro render_metrics(pool, is_total = false) %}
|
||||
<div class="metrics">
|
||||
<div class="metric">
|
||||
<span class="value">{{ pool.calls }}</span>
|
||||
<span class="label">{{ is_total ? 'Total calls' : 'Calls' }}</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="value">{{ '%0.2f'|format(pool.time * 1000) }} <span class="unit">ms</span></span>
|
||||
<span class="label">{{ is_total ? 'Total time' : 'Time' }}</span>
|
||||
</div>
|
||||
|
||||
<div class="metric-divider"></div>
|
||||
|
||||
<div class="metric-group">
|
||||
<div class="metric">
|
||||
<span class="value">{{ pool.reads }}</span>
|
||||
<span class="label">{{ is_total ? 'Total reads' : 'Reads' }}</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="value">{{ pool.writes }}</span>
|
||||
<span class="label">{{ is_total ? 'Total writes' : 'Writes' }}</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="value">{{ pool.deletes }}</span>
|
||||
<span class="label">{{ is_total ? 'Total deletes' : 'Deletes' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="metric-divider"></div>
|
||||
|
||||
<div class="metric-group">
|
||||
<div class="metric">
|
||||
<span class="value">{{ pool.hits }}</span>
|
||||
<span class="label">{{ is_total ? 'Total hits' : 'Hits' }}</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="value">{{ pool.misses }}</span>
|
||||
<span class="label">{{ is_total ? 'Total misses' : 'Misses' }}</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="value">
|
||||
{{ pool.hit_read_ratio ?? 0 }} <span class="unit">%</span>
|
||||
</span>
|
||||
<span class="label">Hits/reads</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endmacro %}
|
||||
|
||||
Reference in New Issue
Block a user