{% extends "base.html" %} {% block title %}Run #{{ run.id }} · Crawl Control Center{% endblock %} {% block content %}

Run #{{ run.id }} — {{ policy_name }}

StatusJobClusterStartedFinishedDuration
{{ run.status }} {{ run.job_ref or '—' }} {{ cluster_name or 'scrapyd/local' }} {{ run.started_at or '—' }} {{ run.finished_at or '—' }} {{ duration_min ~ 'm' if duration_min is not none else '—' }}

Yield

Plan cellsRows attemptedRows new
{{ run.plan_cells if run.plan_cells is not none else '—' }} {{ run.rows_attempted if run.rows_attempted is not none else '—' }} {{ run.rows_new if run.rows_new is not none else '—' }}
{% if run.detail %}

{{ run.detail }}

{% endif %}

Plan

ModeEntity scopeDates
{{ plan.mode or '—' }} {{ plan.entity_type }}{% if plan.entity_ids %} ({{ plan.entity_ids | length }} explicit){% else %} (all){% endif %} {{ plan.start or '?' }} → {{ plan.end or '?' }}
{% for c in plan.concepts %} {% else %} {% endfor %}
ConceptRanked sources
{{ c.code or c.id }}{{ c.sources | join(' → ') or '—' }}
No compiled plan on this run.

Fetches during run window

Approximation: fetch_log rows between {{ fetch_window[0] or '?' }} and {{ fetch_window[1] }}, filtered to this run's plan concepts{% if cluster_name %} and cluster{% endif %} — overlapping runs may double-count.

{% for f in fetch_summary %} {% else %} {% endfor %}
StatusCount
{{ f.status }}{{ f.count }}
No fetches recorded in the window.
{% endblock %}