{% extends "base.html" %} {% block title %}Backup operation result{% endblock %} {% block content %} {# The evidence page. Before this existed, applying a restore in the GUI redirected with a one-word notice: the ten post-restore checks the CLI prints were computed, used to decide whether to keep the restore, and then thrown away. An operator had no way to see what had actually been verified. It renders a *receipt* rather than a transient result, so the same page can be reopened later and shows what an auditor would see. #}

{{ receipt.operation|replace("backup_", "")|capitalize }} result

{% if receipt.status == "succeeded" %}
Succeeded. {% if checks %} Verified by {{ checks|length }} check(s), listed below. {% else %} This operation records no verification checks. {% endif %}
{% else %}
Failed. {% if receipt.detail.error %}{{ receipt.detail.error }}{% endif %}
{% endif %} {% if failed_checks %}
{{ failed_checks|length }} check(s) failed. A restore whose verification fails is not left in place silently -- see the detail on each row.
{% endif %} {% if receipt.detail.mode %} {% endif %} {% if receipt.detail.target_database %} {% endif %} {% if receipt.detail.safety_backup_id %} {% endif %} {% if receipt.detail.evidence_key %} {% endif %}
Receipt{{ receipt.receipt_id }}
When{{ receipt.created_at }}
Operation{{ receipt.operation }}
Backup{{ receipt.backup_id or "-" }}
Target{{ receipt.target_label or "-" }}
By {{ receipt.actor.username or "-" }} ({{ receipt.actor.surface }})
Mode{{ receipt.detail.mode }}
Restored into {{ receipt.detail.target_database }}
Safety backup {{ receipt.detail.safety_backup_id }}
Rehearsal evidence {{ receipt.detail.evidence_key }}
{% if receipt.detail.quarantined %}
Quarantined. The restore completed but failed verification, so the database was kept for inspection rather than dropped. Do not treat it as a good copy.
{% endif %}
{% if receipt.detail.sequences_advanced %}

Sequences advanced

An in-place restore rewinds sequences along with rows. These were pushed back past everything the target had already issued, so no identifier can be handed out twice.

{% for name, moved in receipt.detail.sequences_advanced.items() %} {% endfor %}
SequenceNext wasNext now
{{ name }} {{ moved.from_next }} {{ moved.to_next }}
{% endif %} {% if checks %}

Verification

{% for check in checks %} {% endfor %}
CheckResultDetail
{{ check.id }} {{ check.status }} {{ check.detail }}
{% endif %}

Back to backups

{% endblock %}