{% extends "ui/_layout.html" %}
{% block title %}Backups - bty-web{% endblock %}
{% block subnav %}
{% endblock %}
{% block intro %}
{% from "ui/_intro_box.html" import render as intro_box %}
{% call intro_box() %}
Metadata-only bundles of the per-machine hardware identity (MAC +
lshw + known_disks) -- the same shape
bty-web export produces. Image bytes live in
BTY_IMAGE_ROOT and are NOT included; they're either
still on disk or re-fetchable from the catalog. Trigger one now
with the button below, or enable a scheduled cadence on the Settings page. Backups land
under {{ backups_root }}; retention prunes the oldest.
{% endcall %}
{% endblock %}
{% block content %}
Backups
refreshing...
Schedule:
{% if backup_enabled %}{{ backup_cadence }}{% else %}off{% endif %}
(change)Retention:
keep last {{ backup_retention }}
(prunes oldest on every successful backup)Last scheduled run:
{% if backup_last_run_at %}{{ backup_last_run_at }}{% else %}never{% endif %}Destination:{{ backups_root }}
Backup ID
Status
Trigger
Bytes
Action
No active backups.
Backups on disk
{{ backups_on_disk|length }} bundle{{ '' if backups_on_disk|length == 1 else 's' }}
under {{ backups_root }}
Backup ID
Machines
Catalog entries
Images
Size
bty version
Actions
{% if not backups_on_disk %}
No backups on disk yet. Click Back up now above, or enable a schedule on the Settings page.
{% else %}
{% for b in backups_on_disk %}
{{ b.backup_id }}
{{ b.machines }}
{{ b.catalog_entries }}
{{ b.images }}
{% set n = b.bytes_on_disk %}
{% if n < 1024 %}{{ n }} B
{%- elif n < 1024 * 1024 %}{{ '%.1f'|format(n / 1024) }} KiB
{%- elif n < 1024 * 1024 * 1024 %}{{ '%.1f'|format(n / (1024 * 1024)) }} MiB
{%- elif n < 1024 * 1024 * 1024 * 1024 %}{{ '%.1f'|format(n / (1024 * 1024 * 1024)) }} GiB
{%- else %}{{ '%.1f'|format(n / (1024 * 1024 * 1024 * 1024)) }} TiB{% endif %}