{% extends "base.html" %} {% block title %}Afterlife: Overview{% endblock %} {% block content %}

Overview

{{ total_findings }} findings, {{ credential_count }} credentials, {{ total_persons }} identities across {{ source_counts|length }} source(s).

Findings by severity

{{ severity_counts.critical }} Critical {{ severity_counts.high }} High {{ severity_counts.medium }} Medium {{ severity_counts.low }} Low
{% set max_sev = [severity_counts.critical, severity_counts.high, severity_counts.medium, severity_counts.low]|max %} {% if total_findings > 0 %}
Severity distribution
critical
{{ severity_counts.critical }}
high
{{ severity_counts.high }}
medium
{{ severity_counts.medium }}
low
{{ severity_counts.low }}
{% set max_blast = [blast_counts.broad, blast_counts.moderate, blast_counts.limited]|max %}
Blast tiers
broad
{{ blast_counts.broad }}
moderate
{{ blast_counts.moderate }}
limited
{{ blast_counts.limited }}
{% endif %}

Identity graph

{{ total_persons }} Persons {{ cross_source_count }} Cross-source {{ credential_count }} Credentials {% for src, n in source_counts.items() %}
{{ n }} {{ src }} identities
{% endfor %}

Last scan per source

{% if last_runs %} {% for src, run in last_runs.items() %} {% endfor %}
SourceStarted (UTC)Records
{{ src }} {{ run.started_at[:19] }} {{ run.records_collected if run.records_collected is not none else "-" }} {% if run.error %}failed{% else %}ok{% endif %}

See full scan history →

{% else %}
No scans recorded yet. Run afterlife scan ... to populate.
{% endif %}

Top findings by blast radius

{% if top_findings %} {% for f in top_findings %}
{{ f.severity }} {% if f.blast_label %}{{ f.blast_label }}{% endif %} {{ f.title }} #{{ f.id }} {{ f.rule_id }} →

{{ f.description }}

{% if f.blast_radius %}
{{ f.blast_radius.factors|join("; ") }}
{% endif %}
{% endfor %}

See all findings →

{% else %}
No findings yet. Run `afterlife analyze` against a populated DB.
{% endif %} {% endblock %}