jhjv / app /templates /admin /task_logs.html
Docfile's picture
Upload 76 files
d324dde verified
{% extends "admin/base.html" %}
{% block title %}Logs des Tâches{% endblock %}
{% block page_title %}Logs des Tâches{% endblock %}
{% block content %}
<div class="space-y-6">
<!-- Header avec navigation -->
<div class="flex justify-between items-center">
<h3 class="text-lg font-semibold text-white">Historique des Exécutions</h3>
<a href="{{ url_for('admin_tasks.list_tasks') }}" class="px-4 py-2 bg-gray-700 hover:bg-gray-600 text-white rounded-lg text-sm">
<i class="fas fa-arrow-left mr-2"></i>Retour aux Tâches
</a>
</div>
<!-- Logs -->
<div class="bg-gray-800 rounded-lg border border-gray-700">
<div class="overflow-x-auto">
<table class="w-full text-left">
<thead class="bg-gray-700/50">
<tr>
<th class="px-6 py-3 text-sm font-medium text-gray-300">Date</th>
<th class="px-6 py-3 text-sm font-medium text-gray-300">Tâche</th>
<th class="px-6 py-3 text-sm font-medium text-gray-300">Statut</th>
<th class="px-6 py-3 text-sm font-medium text-gray-300">Durée</th>
<th class="px-6 py-3 text-sm font-medium text-gray-300">Serveur</th>
<th class="px-6 py-3 text-sm font-medium text-gray-300">Détails</th>
</tr>
</thead>
<tbody class="divide-y divide-gray-700">
{% for log in logs.items %}
<tr class="hover:bg-gray-700/30">
<td class="px-6 py-4 text-sm text-gray-300">
{{ log.started_at.strftime('%d/%m/%Y %H:%M:%S') }}
</td>
<td class="px-6 py-4 text-sm font-medium text-white">
{{ log.task_name }}
</td>
<td class="px-6 py-4">
{% if log.status == 'success' %}
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-green-500/20 text-green-400">
<i class="fas fa-check mr-1"></i> Succès
</span>
{% elif log.status == 'failed' %}
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-red-500/20 text-red-400">
<i class="fas fa-times mr-1"></i> Échec
</span>
{% else %}
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-blue-500/20 text-blue-400">
<i class="fas fa-spinner fa-spin mr-1"></i> En cours
</span>
{% endif %}
</td>
<td class="px-6 py-4 text-sm text-gray-300">
{% if log.completed_at %}
{% set duration = (log.completed_at - log.started_at).total_seconds() // 60 %}
{% if duration > 0 %}
{{ duration|int }} min
{% else %}
{{ ((log.completed_at - log.started_at).total_seconds())|int }} s
{% endif %}
{% else %}
-
{% endif %}
</td>
<td class="px-6 py-4 text-sm text-gray-400">
{{ log.server_hostname or 'N/A' }}
<br><span class="text-xs">PID: {{ log.process_id or 'N/A' }}</span>
</td>
<td class="px-6 py-4 text-sm text-gray-300">
{% if log.error_message %}
<div class="max-w-xs">
<p class="text-red-400 text-xs truncate">{{ log.error_message[:100] }}</p>
</div>
{% elif log.output_log %}
<div class="max-w-xs">
<p class="text-xs text-gray-400 truncate">{{ log.output_log[:100] }}</p>
</div>
{% else %}
<span class="text-gray-500">-</span>
{% endif %}
</td>
</tr>
{% if log.error_message or log.output_log %}
<tr class="bg-gray-700/20">
<td colspan="6" class="px-6 py-3">
{% if log.error_message %}
<div class="mb-2">
<p class="text-xs font-semibold text-red-400 mb-1">Erreur:</p>
<pre class="text-xs text-red-300 bg-red-900/20 p-2 rounded overflow-x-auto">{{ log.error_message }}</pre>
</div>
{% endif %}
{% if log.output_log %}
<div>
<p class="text-xs font-semibold text-gray-400 mb-1">Sortie:</p>
<pre class="text-xs text-gray-300 bg-gray-700/50 p-2 rounded overflow-x-auto max-h-40 overflow-y-auto">{{ log.output_log }}</pre>
</div>
{% endif %}
</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
</div>
<!-- Pagination -->
{% if logs.pages > 1 %}
<div class="px-6 py-4 border-t border-gray-700 flex justify-between items-center">
<p class="text-sm text-gray-400">
Page {{ logs.page }} sur {{ logs.pages }}
</p>
<div class="flex space-x-2">
{% if logs.has_prev %}
<a href="{{ url_for('admin_tasks.view_logs', page=logs.prev_num) }}" class="px-3 py-1 bg-gray-700 hover:bg-gray-600 text-white rounded text-sm">
<i class="fas fa-chevron-left"></i> Précédent
</a>
{% endif %}
{% if logs.has_next %}
<a href="{{ url_for('admin_tasks.view_logs', page=logs.next_num) }}" class="px-3 py-1 bg-gray-700 hover:bg-gray-600 text-white rounded text-sm">
Suivant <i class="fas fa-chevron-right"></i>
</a>
{% endif %}
</div>
</div>
{% endif %}
</div>
</div>
{% endblock %}