This commit is contained in:
Holger Sielaff
2025-08-27 09:55:55 +02:00
commit 90c0ff61ed
107 changed files with 8535 additions and 0 deletions

View File

@@ -0,0 +1,83 @@
{% extends 'frontend/base.html' %}
{% block title %} - Task Details{% endblock %}
{% block content %}
<div class="card">
<div class="card-header">
<div class="row">
<div class="col-12 col-md-10">
<h4>Task Details</h4>
<small class="text-muted">Task UUID: {{ task.uuid }}</small>
</div>
<div class="col-12 col-md-2 text-end">
<a href="{% url 'tasklogger:task_list' %}" class="btn btn-secondary">
<i class="bi bi-arrow-left"></i> Back to Tasks
</a>
</div>
</div>
</div>
<div class="card-body">
<div class="row mb-3">
<div class="col-md-3"><strong>Status:</strong></div>
<div class="col-md-9">
<span class="badge {% if task.status == 'completed' %}bg-success{% elif task.status == 'error' %}bg-danger{% else %}bg-primary{% endif %}">
{{ task.status|default:"running" }}
</span>
</div>
</div>
<div class="row mb-3">
<div class="col-md-3"><strong>Created:</strong></div>
<div class="col-md-9">{{ task.created_at }}</div>
</div>
{% if task.proxmox_upid %}
<div class="row mb-3">
<div class="col-md-3"><strong>Proxmox UPID:</strong></div>
<div class="col-md-9"><code>{{ task.proxmox_upid }}</code></div>
</div>
{% endif %}
<hr>
<h5>Task Log Entries</h5>
{% if entries %}
<div class="log-container" style="max-height: 500px; overflow-y: auto; background: #f8f9fa; border: 1px solid #dee2e6; border-radius: 8px; padding: 15px;">
{% for entry in entries %}
<div class="log-entry mb-2" style="padding: 8px; border-left: 3px solid #007bff; background: white; border-radius: 4px;">
<div class="d-flex justify-content-between align-items-start">
<div class="log-content flex-grow-1">
{% if entry.message %}
{% if entry.message|length > 200 %}
<pre style="font-size: 13px; margin: 0; white-space: pre-wrap;">{{ entry.message }}</pre>
{% else %}
<span style="font-family: 'Courier New', monospace; font-size: 13px;">{{ entry.message }}</span>
{% endif %}
{% else %}
<em class="text-muted">No message</em>
{% endif %}
</div>
<div class="log-timestamp text-muted" style="font-size: 11px; margin-left: 15px; white-space: nowrap;">
{{ entry.created_at|date:"H:i:s" }}
</div>
</div>
</div>
{% endfor %}
</div>
{% else %}
<div class="alert alert-info">
<i class="bi bi-info-circle"></i> No log entries found for this task.
</div>
{% endif %}
</div>
</div>
<style>
.log-container {
font-family: 'Courier New', monospace;
}
.log-entry:hover {
background-color: #f8f9fa !important;
}
</style>
{% endblock %}

View File

@@ -0,0 +1,76 @@
{% extends 'frontend/base.html' %}
{% block title %} - Task List{% endblock %}
{% block content %}
<div class="card">
<div class="card-header">
<h4>Recent Tasks</h4>
<small class="text-muted">Last 50 tasks</small>
</div>
<div class="card-body">
{% if tasks %}
<div class="table-responsive">
<table class="table table-striped table-hover">
<thead>
<tr>
<th style="width: 50px;">#</th>
<th>UUID</th>
<th>Status</th>
<th>Proxmox UPID</th>
<th>Created</th>
<th>Latest Entry</th>
<th style="width: 100px;">Actions</th>
</tr>
</thead>
<tbody>
{% for task in tasks %}
<tr>
<td>{{ forloop.counter }}</td>
<td>
<code style="font-size: 11px;">{{ task.uuid|truncatechars:13 }}</code>
</td>
<td>
<span class="badge {% if task.status == 'completed' %}bg-success{% elif task.status == 'error' %}bg-danger{% else %}bg-primary{% endif %}">
{{ task.status|default:"running" }}
</span>
</td>
<td>
{% if task.proxmox_upid %}
<code style="font-size: 11px;">{{ task.proxmox_upid|truncatechars:20 }}</code>
{% else %}
<em class="text-muted">-</em>
{% endif %}
</td>
<td>
<small>{{ task.created_at|date:"d.m.Y H:i" }}</small>
</td>
<td>
{% with latest_entry=task.entries.last %}
{% if latest_entry %}
<small style="font-family: 'Courier New', monospace; font-size: 11px;">
{{ latest_entry.message|truncatechars:50 }}
</small>
{% else %}
<em class="text-muted">No entries</em>
{% endif %}
{% endwith %}
</td>
<td>
<a href="{% url 'tasklogger:task_detail' task.uuid %}" class="btn btn-sm btn-outline-primary">
<i class="bi bi-eye"></i> View
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<div class="alert alert-info">
<i class="bi bi-info-circle"></i> No tasks found.
</div>
{% endif %}
</div>
</div>
{% endblock %}