mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-09 11:46:49 +00:00
The Logs page shows who added, changed or deleted a compute, from web or API, and every login, failed login, lockout and logout, with the client address and a Result column (Done, Failed, Unknown for older rows). A failed change is recorded with its reason and the error still reaches the user; a refused one is recorded too. - logs.audit.write saves each row in its own savepoint and never raises, so a log write cannot break or undo the action it records. The audit() context manager writes one row when the change ends. - Logs gains success and ip; user, host and instance are wider and date is indexed. The page orders by date then id. - A compute edit names the changed fields; an edit that changes nothing writes no row, and an empty password field is no change. - A compute's VMs leaving the panel get a system row each: owners kept on the Removed VMs page, moved to another compute, restored, left without owners, or the removed record expired. - Job rows carry the result. A job's log entry that cannot be computed is logged and skipped instead of rolling back the finish (test_service.py changes this on purpose). - Logins are recorded by signal receivers; CustomLoginView is removed and the plain LoginView is used. A wrong OTP code is a failed login, counted by django-axes toward the lockout. Panel records and host-side objects follow in the next layers.
63 lines
2.5 KiB
HTML
63 lines
2.5 KiB
HTML
{% extends "base.html" %}
|
|
{% load i18n %}
|
|
{% load django_bootstrap5 %}
|
|
{% load bootstrap_icons %}
|
|
|
|
{% block title %}{% trans "Logs" %}{% endblock %}
|
|
|
|
{% block page_heading %}{% trans "Logs" %}{% endblock page_heading %}
|
|
|
|
{% block page_heading_extra %}
|
|
{% include 'search_block.html' %}
|
|
{% endblock page_heading_extra %}
|
|
|
|
|
|
|
|
{% block content %}
|
|
<div class="row">
|
|
<div class="col-lg-12">
|
|
{% if not logs %}
|
|
<div class="col-lg-12">
|
|
<div class="alert alert-warning shadow-sm">
|
|
{% bs_icon 'exclamation-triangle'%} <strong>{% trans "Warning" %}:</strong> {% trans "You don't have any Logs" %}
|
|
</div>
|
|
</div>
|
|
{% else %}
|
|
<div class="table-responsive">
|
|
<table class="table table-hover table-striped">
|
|
<thead>
|
|
<tr>
|
|
<th scope="col">#</th>
|
|
<th scope="col">{% trans "Date" %}</th>
|
|
<th scope="col">{% trans "User" %}</th>
|
|
<th scope="col">{% trans "Host" %}</th>
|
|
<th scope="col">{% trans "Instance" %}</th>
|
|
<th scope="col">{% trans "Message" %}</th>
|
|
<th scope="col">{% trans "Result" %}</th>
|
|
<th scope="col">{% trans "IP" %}</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody class="searchable">
|
|
{% for log in logs %}
|
|
<tr>
|
|
<td>{{ log.id }}</td>
|
|
<td style="width:130px;">{{ log.date|date:"M d H:i:s" }}</td>
|
|
<td>{{ log.user }}</td>
|
|
<td>{{ log.host }}</td>
|
|
<td>{{ log.instance }}</td>
|
|
<td>{{ log.message }}</td>
|
|
<td>{% if log.success is None %}{% trans "Unknown" %}{% elif log.success %}{% trans "Done" %}{% else %}{% trans "Failed" %}{% endif %}</td>
|
|
<td>{{ log.ip|default:"" }}</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
{% bootstrap_pagination logs %}
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|
|
{% block script %}
|
|
<script src="/static/js/filter-table.js"></script>
|
|
{% endblock script %}
|