{% extends "base.html" %} {% block title %}Scan {{ job.image_id[:12] }}… — {{ app_name }}{% endblock %} {% block content %}

Image Scan Report

{{ job.image_id }}

New Scan
{% if job.status in ['pending', 'scanning'] %}
{{ job.status | title }}…

Provisioning a temporary instance from {{ job.image_id }}, running OpenSCAP, then terminating. This typically takes 3–8 minutes.

{% elif job.status == 'failed' %}

Scan Failed

{{ job.error }}

{% else %}
{% set grade_colors = { 'A': 'text-emerald-400', 'B': 'text-green-400', 'C': 'text-yellow-400', 'D': 'text-orange-400', 'F': 'text-red-400' } %} {% set grade_bg = { 'A': 'bg-emerald-950/50 border-emerald-800/40', 'B': 'bg-green-950/50 border-green-800/40', 'C': 'bg-yellow-950/50 border-yellow-800/40', 'D': 'bg-orange-950/50 border-orange-800/40', 'F': 'bg-red-950/50 border-red-800/40' } %}
{{ job.grade or '?' }}
{% if job.score_pct is not none %} {{ "%.1f"|format(job.score_pct) }}% {% else %} N/A {% endif %} compliance score
{{ job.image_id }} {{ job.provider }} {{ job.region }} {{ job.profile_name }}
{% if job.score_pct is not none %}
{% endif %}
{% if job.severity_counts %}
{% set sev_config = [ ('critical', 'Critical', 'text-red-300', 'bg-red-950/40 border-red-800/30'), ('high', 'High', 'text-orange-300', 'bg-orange-950/40 border-orange-800/30'), ('medium', 'Medium', 'text-yellow-300', 'bg-yellow-950/40 border-yellow-800/30'), ('low', 'Low', 'text-blue-300', 'bg-blue-950/40 border-blue-800/30'), ] %} {% for key, label, text_cls, bg_cls in sev_config %}
{{ job.severity_counts.get(key, 0) }}
{{ label }} findings
{% endfor %}
{% endif %} {% if job.results and job.results.rules %} {% set failed_rules = job.results.rules | selectattr('result', 'eq', 'fail') | list %} {% if failed_rules %}

Failed Rules ({{ failed_rules | length }} total)

{% for rule in failed_rules %} {% set sev = rule.severity | lower %} {% set sev_badge = { 'critical': 'bg-red-900/60 text-red-300', 'high': 'bg-orange-900/60 text-orange-300', 'medium': 'bg-yellow-900/60 text-yellow-300', 'low': 'bg-blue-900/60 text-blue-300', } %}
{{ sev | upper }} {{ rule.id }} {% if rule.title %} {{ rule.title }} {% endif %}
{% endfor %}
{% endif %}
{% set counts = job.results.get('counts', {}) %}
{{ counts.get('pass', job.results.get('passed', 0)) }}
Passed
{{ counts.get('fail', job.results.get('failed', 0)) }}
Failed
{{ counts.get('notchecked', counts.get('notapplicable', 0)) }}
Skipped / N/A
{% endif %} {% endif %}{# end if complete #}
{# end #scan-page-content #}
{# end #scan-status #}
{% endblock %}