(release) Add purged snapshot audit overview
Record snapshot purge history whenever retention or incomplete cleanup removes snapshot directories and SQL records. Store the purge reason, original kind, path, action source, and triggering operator so manual, scheduled, CLI, and incomplete cleanup actions remain auditable after the original snapshot record is deleted. Add a staff-only Purged Snapshots page with host/action filters and register the audit model in Django admin. Refs #16 Refs #8
This commit is contained in:
50
src/pobsync_backend/migrations/0013_purgedsnapshot.py
Normal file
50
src/pobsync_backend/migrations/0013_purgedsnapshot.py
Normal file
@@ -0,0 +1,50 @@
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("pobsync_backend", "0012_review_state"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="PurgedSnapshot",
|
||||
fields=[
|
||||
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
|
||||
("host_name", models.CharField(max_length=255)),
|
||||
("kind", models.CharField(max_length=16)),
|
||||
("dirname", models.CharField(max_length=255)),
|
||||
("path", models.CharField(max_length=1024)),
|
||||
("reason", models.CharField(blank=True, max_length=512)),
|
||||
(
|
||||
"action",
|
||||
models.CharField(
|
||||
choices=[
|
||||
("manual", "Manual"),
|
||||
("scheduled", "Scheduled"),
|
||||
("cli", "CLI"),
|
||||
("incomplete_cleanup", "Incomplete cleanup"),
|
||||
],
|
||||
max_length=32,
|
||||
),
|
||||
),
|
||||
("triggered_by", models.CharField(blank=True, max_length=150)),
|
||||
("metadata", models.JSONField(blank=True, default=dict)),
|
||||
("purged_at", models.DateTimeField(auto_now_add=True)),
|
||||
(
|
||||
"host",
|
||||
models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.SET_NULL,
|
||||
related_name="purged_snapshots",
|
||||
to="pobsync_backend.hostconfig",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"ordering": ["-purged_at", "host_name", "dirname"],
|
||||
},
|
||||
),
|
||||
]
|
||||
Reference in New Issue
Block a user