{% extends "base.html" %} {% load static %} {% comment %} One flow's stats page (SPEC §18: "Flow detail page renders totals and per-node overlay in the builder" — the overlay is the builder's; this is the page). Three things, in the order a reader wants them: what happened in total, how it moved over the range, and which node did it. The builder shows the same counters as chips on the canvas; a table is what you read, a chip is what you glance at. The chart data crosses into JavaScript through `json_script` rather than through an interpolated script body. The page's CSP is nonce-based (SECURITY-BASELINE §8) and Chart.js is served from 'self' (`scripts/vendor-js.mjs` vendored it for this issue), so nothing here reaches a CDN. {% endcomment %} {% block title %}{{ flow.name }} · Analytics · DemandTrail Messaging{% endblock %} {% block page_header %}
Counters for the last {{ days }} days. {{ flow.get_status_display }}
| Step | Sent | Delivered | Failed | Clicked | {# Clicks per send, not a click-through rate — it can exceed 100%. #}Clicks/send |
|---|---|---|---|---|---|
{{ row.node_id }}
{% if row.type %}{{ row.type }}{% endif %}
|
{{ row.sent }} | {{ row.delivered }} | {{ row.failed }} | {{ row.clicked }} | {% if row.ctr is not None %}{{ row.ctr }}%{% else %}N/A{% endif %} |
This flow has not sent anything in this range.
{% endif %}