{% extends "pobsync_backend/base.html" %} {% block title %}Run {{ run.id }} | {{ run.host.host }}{% endblock %} {% block content %}

Run {{ run.id }}

Back to host {% if can_cancel %}
{% csrf_token %}
{% endif %} {% if run.status == "failed" or run.status == "warning" %} {% if not run.reviewed_at %}
{% csrf_token %}
{% endif %} {% endif %}
Host
{{ run.host.host }}
Status
{{ run.status }}
Type
{{ run.run_type }}
Rsync
{{ run.rsync_exit_code|default:"" }}
{% if failure %}

Failure

Category: {{ failure.category|default:"unknown" }}
Summary: {{ failure_summary }}
Hint: {{ failure.hint|default:"" }}
{% endif %} {% if run.reviewed_at %}

Review

Reviewed: {{ run.reviewed_at }}
Reviewed by: {{ run.reviewed_by|default:"unknown" }}
{% endif %} {% if dry_run_summary %}

Dry Run Summary

Status
{{ dry_run_summary.status }}
Files Seen
{{ dry_run_summary.files_seen|default:"unknown" }}
Would Transfer
{{ dry_run_summary.files_would_transfer|default:"unknown" }}
Transfer Estimate
{{ dry_run_summary.transfer_estimate_bytes|filesizeformat }}
Total Size
{{ dry_run_summary.total_file_size_bytes|filesizeformat }}
Link-Dest Saving
{{ dry_run_summary.link_dest_estimated_savings_bytes|filesizeformat }}
{% if dry_run_summary.duration_seconds is not None %}
Duration: {{ dry_run_summary.duration_seconds }}s
{% endif %}
Log: {% if dry_run_summary.log_available %} Open full rsync log {% elif rsync_log_path %} {{ rsync_log_path }} (missing) {% else %} not recorded yet {% endif %}
{% if dry_run_summary.warnings %}
Warnings:
{% else %}
Warnings: none recorded
{% endif %}
{% endif %}

Timing

Created: {{ run.created_at }}
Started: {{ run.started_at|default:"" }}
Ended: {{ run.ended_at|default:"" }}
{% if execution %}
Worker: {{ execution.worker_host|default:"unknown" }}{% if execution.worker_pid %} pid {{ execution.worker_pid }}{% endif %}
Worker heartbeat: {{ execution.heartbeat_at|default:"" }}
{% endif %}

Snapshot

Snapshot: {% if run.snapshot %}{{ run.snapshot.dirname }}{% else %}{{ run.snapshot_path|default:"" }}{% endif %}
Base: {{ run.base_path|default:"" }}
Rsync log: {% if rsync_log_exists %} {{ rsync_log_path }} {% elif rsync_log_path %} {{ rsync_log_path }} (missing) {% else %} none {% endif %}
{% if requested %}

Requested Options

Dry run: {{ requested.dry_run|yesno:"yes,no" }}
Verbose rsync output: {{ requested.verbose_output|yesno:"yes,no" }}
Apply retention: {{ requested.prune|yesno:"yes,no" }}
Retention max delete: {{ requested.prune_max_delete }}
Protect bases: {{ requested.prune_protect_bases|yesno:"yes,no" }}
{% endif %}

Rsync Command

{% if rsync_command %}
{% for part in rsync_command %}{{ part }}{% if not forloop.last %}
{% endif %}{% endfor %}
{% else %}

No rsync command recorded yet.

{% endif %}

Rsync Log

{% if rsync_log_exists %}
Open full rsync log
{{ rsync_log_path }}
{% elif rsync_log_path %}
{{ rsync_log_path }} (missing)
{% else %}
No rsync log path recorded yet.
{% endif %}
{% if rsync_log_tail %}
{% for line in rsync_log_tail %}{{ line }}{% if not forloop.last %}
{% endif %}{% endfor %}
{% else %}

No recent rsync log output recorded yet.

{% endif %}
{% if stats %}

Stats

Duration: {{ stats.duration_seconds|default:"" }}{% if stats.duration_seconds is not None %}s{% endif %}
Files seen: {{ stats.rsync.files_total|default:"" }}
Files transferred: {{ stats.rsync.files_transferred|default:"" }}
Files created: {{ stats.rsync.files_created|default:"" }}
Files deleted: {{ stats.rsync.files_deleted|default:"" }}
Total file size: {{ stats.rsync.total_file_size_bytes|filesizeformat }}
Transferred file size: {{ stats.rsync.total_transferred_file_size_bytes|filesizeformat }}
Literal data: {{ stats.rsync.literal_data_bytes|filesizeformat }}
Matched data: {{ stats.rsync.matched_data_bytes|filesizeformat }}
Estimated link-dest saving: {{ stats.rsync.link_dest_estimated_savings_bytes|filesizeformat }}
{% endif %} {% if has_prune_result %}

Retention

Status: {% if prune_result.ok %}ok{% else %}warning{% endif %}
{% if prune_result.source %}
Source: {{ prune_result.source }}
{% endif %} {% if prune_result.kind %}
Kind: {{ prune_result.kind }}
{% endif %} {% if prune_result.planned_delete_count is not None %}
Planned deletions: {{ prune_result.planned_delete_count }}
{% endif %} {% if prune_result.deleted %}
Deleted: {{ prune_result.deleted|length }}
{% endif %} {% if prune_result.max_delete is not None %}
Max delete: {{ prune_result.max_delete }}
{% endif %} {% if prune_result.protect_bases is not None %}
Protect bases: {{ prune_result.protect_bases|yesno:"yes,no" }}
{% endif %} {% if prune_result.incomplete_ignored_count %}
Incomplete ignored: {{ prune_result.incomplete_ignored_count }}
{% endif %} {% if prune_result.actions %}
Actions:
{% endif %} {% if prune_result.error %}
Error: {{ prune_result.error }}
{% endif %} {% if prune_result.type %}
Type: {{ prune_result.type }}
{% endif %}
{% endif %} {% if retention_warning.has_warning %}

Retention Warnings

{% if retention_warning.prune_exceeded %}
Scheduled pruning for this host would delete {{ retention_warning.delete_count }} snapshot(s), above max delete {{ retention_warning.max_delete }}.
{% endif %} {% if retention_warning.incomplete_count %}
{{ retention_warning.incomplete_count }} incomplete snapshot(s) exist for this host and are excluded from retention cleanup.
{% endif %} {% if retention_warning.error %}
{{ retention_warning.error }}
{% endif %}
{% endif %}

Raw Result

{{ result_json }}
{% endblock %}