{% extends 'layout.twig' %} {% block title %}{{ policy.name }} — Policy — IRDB{% endblock %} {% block content %} {# Twig's |merge calls PHP array_merge, which renumbers integer keys; key by slug (a string) so {scanners:40, indexer:30,…} round-trips faithfully. #} {% set thresholds_by_slug = {} %} {% for t in policy.thresholds|default([]) %} {% if t.category_slug %} {% set thresholds_by_slug = thresholds_by_slug|merge({(t.category_slug): t.threshold}) %} {% endif %} {% endfor %}
← Back to policies

{{ policy.name }}

{% if can_write %} {% include 'partials/confirm_form.twig' with { action: '/app/policies/' ~ policy.id ~ '/delete', label: 'Delete policy', description: 'Refused if any consumer references this policy.', } only %} {% endif %}

Metadata

Threshold matrix

Empty value ⇒ category not in policy
{% for c in categories %} {% endfor %}
Category Decay Threshold
{{ c.slug }} — {{ c.name }} {{ c.decay_function }} ({{ c.decay_param }})
{% if can_write %}
{% endif %}

Score distribution

One line per thresholded category, IPs grouped by score in steps of 5; the shaded area to the right of each threshold marks scores high enough to land on this policy's blocklist.

No scored IPs in the database yet.

Preview

Loading…

Sample = first 50 entries from the rendered blocklist. Expiry for scored entries is an estimate assuming no further reports; manual entries show the configured expiry.

{% endblock %}