mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-26 03:58:45 +02:00
* 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
176 lines
8.5 KiB
Twig
176 lines
8.5 KiB
Twig
{% extends '@WebProfiler/Profiler/layout.html.twig' %}
|
|
|
|
{% block head %}
|
|
{{ parent() }}
|
|
|
|
<style>
|
|
.sf-profiler-httpclient-requests thead th {
|
|
vertical-align: top;
|
|
}
|
|
.sf-profiler-httpclient-requests .http-method {
|
|
border: 1px solid var(--header-status-request-method-color);
|
|
border-radius: 5px;
|
|
color: var(--header-status-request-method-color);
|
|
display: inline-block;
|
|
font-weight: 500;
|
|
line-height: 1;
|
|
margin-right: 6px;
|
|
padding: 2px 4px;
|
|
text-align: center;
|
|
white-space: nowrap;
|
|
}
|
|
.sf-profiler-httpclient-requests .status-response-status-code {
|
|
background: var(--gray-600);
|
|
border-radius: 4px;
|
|
color: var(--white);
|
|
display: inline-block;
|
|
font-size: 12px;
|
|
font-weight: bold;
|
|
margin-bottom: 2px;
|
|
padding: 1px 3px;
|
|
}
|
|
.sf-profiler-httpclient-requests .status-response-status-code.status-success { background: var(--header-success-status-code-background); color: var(--header-success-status-code-color); }
|
|
.sf-profiler-httpclient-requests .status-response-status-code.status-warning { background: var(--header-warning-status-code-background); color: var(--header-warning-status-code-color); }
|
|
.sf-profiler-httpclient-requests .status-response-status-code.status-error { background: var(--header-error-status-code-background); color: var(--header-error-status-code-color); }
|
|
</style>
|
|
{% endblock %}
|
|
|
|
|
|
{% block toolbar %}
|
|
{% if collector.requestCount %}
|
|
{% set icon %}
|
|
{{ source('@WebProfiler/Icon/http-client.svg') }}
|
|
{% set status_color = '' %}
|
|
<span class="sf-toolbar-value">{{ collector.requestCount }}</span>
|
|
{% endset %}
|
|
|
|
{% set text %}
|
|
<div class="sf-toolbar-info-piece">
|
|
<b>Total requests</b>
|
|
<span>{{ collector.requestCount }}</span>
|
|
</div>
|
|
<div class="sf-toolbar-info-piece">
|
|
<b>HTTP errors</b>
|
|
<span class="sf-toolbar-status {{ collector.errorCount > 0 ? 'sf-toolbar-status-red' }}">{{ collector.errorCount }}</span>
|
|
</div>
|
|
{% endset %}
|
|
|
|
{{ include('@WebProfiler/Profiler/toolbar_item.html.twig', { link: profiler_url, status: status_color }) }}
|
|
{% endif %}
|
|
{% endblock %}
|
|
|
|
{% block menu %}
|
|
<span class="label {{ collector.requestCount == 0 ? 'disabled' }}">
|
|
<span class="icon">{{ source('@WebProfiler/Icon/http-client.svg') }}</span>
|
|
<strong>HTTP Client</strong>
|
|
{% if collector.requestCount %}
|
|
<span class="count">
|
|
{{ collector.requestCount }}
|
|
</span>
|
|
{% endif %}
|
|
</span>
|
|
{% endblock %}
|
|
|
|
{% block panel %}
|
|
<h2>HTTP Client</h2>
|
|
{% if collector.requestCount == 0 %}
|
|
<div class="empty empty-panel">
|
|
<p>No HTTP requests were made.</p>
|
|
</div>
|
|
{% else %}
|
|
<div class="metrics">
|
|
<div class="metric">
|
|
<span class="value">{{ collector.requestCount }}</span>
|
|
<span class="label">Total requests</span>
|
|
</div>
|
|
<div class="metric">
|
|
<span class="value">{{ collector.errorCount }}</span>
|
|
<span class="label">HTTP errors</span>
|
|
</div>
|
|
</div>
|
|
<h2>Clients</h2>
|
|
<div class="sf-tabs">
|
|
{% for name, client in collector.clients %}
|
|
<div class="tab {{ client.traces|length == 0 ? 'disabled' }}">
|
|
<h3 class="tab-title">{{ name }} <span class="badge">{{ client.traces|length }}</span></h3>
|
|
<div class="tab-content">
|
|
{% if client.traces|length == 0 %}
|
|
<div class="empty">
|
|
<p>No requests were made with the "{{ name }}" service.</p>
|
|
</div>
|
|
{% else %}
|
|
<h4>Requests</h4>
|
|
{% for trace in client.traces %}
|
|
{% set profiler_token = '' %}
|
|
{% set profiler_link = '' %}
|
|
{% if trace.info.response_headers is defined %}
|
|
{% for header in trace.info.response_headers %}
|
|
{% if header matches '/^x-debug-token: .*$/i' %}
|
|
{% set profiler_token = (header.getValue | slice('x-debug-token: ' | length)) %}
|
|
{% endif %}
|
|
{% if header matches '/^x-debug-token-link: .*$/i' %}
|
|
{% set profiler_link = (header.getValue | slice('x-debug-token-link: ' | length)) %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% endif %}
|
|
<table class="sf-profiler-httpclient-requests">
|
|
<thead>
|
|
<tr>
|
|
<th>
|
|
<span class="http-method">{{ trace.method }}</span>
|
|
</th>
|
|
<th class="full-width">
|
|
{{ trace.url }}
|
|
</th>
|
|
{% if profiler_token and profiler_link %}
|
|
<th>
|
|
Profile
|
|
</th>
|
|
{% endif %}
|
|
{% if trace.curlCommand is defined and trace.curlCommand %}
|
|
<th>
|
|
<button class="btn btn-sm hidden" title="Copy as cURL" data-clipboard-text="{{ trace.curlCommand }}">Copy as cURL</button>
|
|
</th>
|
|
{% endif %}
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% if trace.options is not empty %}
|
|
<tr>
|
|
<th class="font-normal">Request options</th>
|
|
<td>{{ profiler_dump(trace.options, maxDepth=1) }}</td>
|
|
</tr>
|
|
{% endif %}
|
|
<tr>
|
|
<th class="font-normal">Response</th>
|
|
<td{% if trace.curlCommand is defined and trace.curlCommand %} colspan="2"{% endif %}>
|
|
{% if trace.http_code >= 500 %}
|
|
{% set responseStatus = 'error' %}
|
|
{% elseif trace.http_code >= 400 %}
|
|
{% set responseStatus = 'warning' %}
|
|
{% else %}
|
|
{% set responseStatus = 'success' %}
|
|
{% endif %}
|
|
<span class="font-normal status-response-status-code status-{{ responseStatus }}">
|
|
{{ trace.http_code }}
|
|
</span>
|
|
|
|
{{ profiler_dump(trace.info, maxDepth=1) }}
|
|
</td>
|
|
{% if profiler_token and profiler_link %}
|
|
<td>
|
|
<span><a href="{{ profiler_link }}" target="_blank">{{ profiler_token }}</a></span>
|
|
</td>
|
|
{% endif %}
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
{% endfor %}
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
{% endfor %}
|
|
{% endif %}
|
|
</div>
|
|
{% endblock %}
|