{% extends "base.html" %} {% block extra_css %} {% endblock %} {% block content %}
{# ── Paste form ─────────────────────────────────────────────────────── #}
Log Explorer — Analyse Pynenc Log Lines
Paste any pynenc log block. Each line starting with a timestamp + level is parsed individually. Entity references like invocation:UUID, task:key, runner:ID, workflow:ID become clickable links. IDs inside [PPR(id).PPRW(id)…] brackets are also clickable.
{% if log %} Clear {% endif %}
{# ── Analysis results ────────────────────────────────────────────────── #} {% if analysis %} {% if not analysis.has_valid %}
Could not extract pynenc context from the pasted text. Make sure each line starts with a timestamp and log level, or contains structured entity references like invocation:UUID.
{% else %} {# ── Per-line log display ────────────────────────────────────────────── #}
Parsed Log Lines {{ analysis.lines|length }}
timeline Timeline
{% for la in analysis.lines %} {% include "log_explorer/partials/line_card.html" %} {% endfor %}
{# ── SVG mini-timeline ──────────────────────────────────────────────── #} {% if analysis.svg_content %}
Invocation Timeline open full →
{{ analysis.svg_content|safe }}
{# Detail panel shown on SVG element click #}
close
Invocation:
Status:
Task:
{% endif %} {# ── Compact all-references panel ─────────────────────────────────── #} {% if analysis.all_entity_refs %}
References {{ analysis.all_entity_refs|length }}
{% include "log_explorer/partials/all_refs.html" %}
{% endif %} {% endif %}{# has_valid #} {% endif %}{# analysis #}
{# ── Session persistence: remember last log across tab switches ────────── #} {% if analysis and analysis.svg_content %} {# Emit invocation→task mapping for JS task highlighting in SVG #} {% include "log_explorer/partials/log_explorer_scripts.html" %} {% endif %} {% endblock %}