{% if logo_path %}
{% else %}
{% endif %}

Scan Analysis

Operational Insights and Performance Metrics
Report: {{ recipe_name }} | Generated: {{ generated_at }} | Date Range: {{ start_date }} to {{ end_date }}
{% if table_data and table_data.rows %} {% set summary_row = table_data.rows[-1] %}

Total Scans

{{ summary_row.total_scans_started }}
scans started

Projects

{{ summary_row.unique_projects }}
{{ summary_row.new_projects }} new / {{ summary_row.existing_projects }} existing

Versions

{{ summary_row.unique_versions }}
artifacts processed

Success Rate

{% set success_rate = ((summary_row.total_scans_started|default(0) - summary_row.failed_scans|default(0)) / summary_row.total_scans_started * 100) if summary_row.total_scans_started|default(0) > 0 else 0 %}
{{ "%.1f"|format(success_rate) }}%
{{ summary_row.total_scans_started|default(0) - summary_row.failed_scans|default(0) }} succeeded

Average Duration

{{ "%.0f"|format(summary_row.median_duration_minutes|default(0)) }}
minutes

Queue Size

{{ summary_row.recently_queued }}
scans waiting

Failed Scans

{{ summary_row.failed_scans }}
scans failed
{% endif %} {% if table_data and table_data.rows %}

📈 Scan Throughput Over Time

Daily scan volume showing started vs completed scans

⏱️ Average Scan Duration by Day

Average time to complete scans (in minutes)

✅ Daily Success Rate

Percentage of successful vs failed scans by day

🔧 Scan Type Distribution

Breakdown of scan types (SCA, SAST, CONFIG)

❌ Scan Failures Over Time

Failure volume by scan type (bars) with overall failure rate (line) - highlights problematic periods

{% else %}

No scan data available for the selected time period.

{% endif %} {% if table_data and table_data.rows %}

Daily Scan Metrics

{% for row in table_data.rows %} {% endfor %}
Date Started Projects New Existing Versions Completed Failed In Progress Success Rate Avg Duration (min) Scan Counts by Type
SCA SAST CONFIG SOURCE SCA REACHABILITY IMPORT
{{ row.date }} {{ row.total_scans_started }} {{ row.unique_projects }} {{ row.new_projects }} {{ row.existing_projects }} {{ row.unique_versions }} {{ row.total_completed_scans }} {{ row.failed_scans }} {{ row.still_active_scans }} {{ "%.1f"|format(row.success_rate|default(0)) }}% {{ "%.0f"|format(row.avg_duration_minutes|default(0)) if row.avg_duration_minutes|default(0) > 0 else "-" }} {{ row.sca_scans }} {{ row.sast_scans }} {{ row.config_scans }} {{ row.source_sca_scans }} {{ row.vulnerability_analysis_scans }} {{ row.sbom_import_scans }}
{% endif %} {% if raw_data %}

📋 Individual Scan Details

Complete list of all scans for detailed analysis and custom reporting. This data is also available in the CSV and XLSX downloads.

{% if folder_path %}{% endif %} {% if raw_data.iterrows %} {% for _, row in raw_data.iterrows() %} {% if folder_path %}{% endif %} {% endfor %} {% else %} {% for row in raw_data %} {% if folder_path %}{% endif %} {% endfor %} {% endif %}
Scan ID Date Started Date Completed Status TypeFolderProject Version Duration (min) Error Message
{{ row.get('id', 'N/A') }} {{ row.get('scan_date', 'N/A') }} {{ row.get('completion_date', 'N/A') if row.get('completion_date') != 'NaT' else '-' }} {{ row.get('status', 'N/A') }} {{ row.get('type', 'N/A') }} {{ row.get('folder_name', '') }}{{ row.get('project_name', 'N/A') }} {{ row.get('version_name', '-') if row.get('version_name') else '-' }} {{ "%.1f"|format(row.get('duration_minutes', 0)) if row.get('duration_minutes', 0) > 0 else '-' }} {{ row.get('errorMessage', '-') if row.get('errorMessage') else '-' }}
{{ row.get('id', 'N/A') }} {{ row.get('scan_date', 'N/A') }} {{ row.get('completion_date', 'N/A') if row.get('completion_date') != 'NaT' else '-' }} {{ row.get('status', 'N/A') }} {{ row.get('type', 'N/A') }} {{ row.get('folder_name', '') }}{{ row.get('project_name', 'N/A') }} {{ row.get('version_name', '-') if row.get('version_name') else '-' }} {{ "%.1f"|format(row.get('duration_minutes', 0)) if row.get('duration_minutes', 0) > 0 else '-' }} {{ row.get('errorMessage', '-') if row.get('errorMessage') else '-' }}
{% endif %}