{% extends "base.html" %} {% block content %}

Comparison Results

A {{ job_a.name or job_a.id[:8] + '...' }} ({{ job_a.created_at.strftime('%m/%d %H:%M') }})
B {{ job_b.name or job_b.id[:8] + '...' }} ({{ job_b.created_at.strftime('%m/%d %H:%M') }})
New Comparison
{% if not common_hosts %}

No Common Hosts

These jobs don't have any hosts in common to compare.

{% else %}

Buffer Pool Overview

All hosts at a glance
{% for host_id in common_hosts %} {% set bp = comparisons[host_id].buffer_pool %} {% set hr = bp.hit_ratio if bp else none %} {% set pool_size = bp.pool_size_gb if bp else none %} {% set used = bp.used_gb if bp else none %} {% set used_pct = bp.used_percent if bp else none %} {% endfor %}
Host Pool Size Used Hit Ratio
Job A Job B Job A Job B
{% if pool_size %} {% if pool_size.delta != 0 %}
{{ pool_size.value_a }} {{ pool_size.value_b }} GB {{ '+' if pool_size.delta > 0 else '' }}{{ pool_size.delta }}
{% else %} {{ pool_size.value_b }} GB {% endif %} {% else %}—{% endif %}
{% if used %} {{ used.value_a }} GB ({{ used_pct.value_a if used_pct else '?' }}%) {% else %}—{% endif %} {% if used %} {{ used.value_b }} GB ({{ used_pct.value_b if used_pct else '?' }}%) {% if used.delta > 0.1 %} {% elif used.delta < -0.1 %} {% endif %} {% else %}—{% endif %} {% if hr %}{{ hr.value_a }}%{% else %}—{% endif %} {% if hr %} {{ hr.value_b }}% {% if hr.delta > 0.05 %} {% elif hr.delta < -0.05 %} {% endif %} {% else %}—{% endif %}

Regression Summary {% if visible_regressions %} {{ visible_regressions|length }} {% endif %}

{% if suppressed_regressions %} {% endif %}
{% if visible_regressions %}
{% for reg in visible_regressions %}
{% if reg.severity == 'critical' %}🔴{% else %}🟡{% endif %}
{{ reg.message }} {{ reg.host_label }} {% if reg.suppression_reason and 'Downgraded' in reg.suppression_reason %} ↓ downgraded {% endif %}
Metric: {{ reg.metric }}
{% endfor %}
{% if suppressed_regressions %}
Suppressed Issues
{% for reg in suppressed_regressions %}
{% if reg.original_severity == 'critical' %}🔴{% else %}🟡{% endif %}
{{ reg.message }} {{ reg.host_label }}
{{ reg.metric }} {{ reg.suppression_reason }}
{% endfor %}
{% endif %} {% elif not suppressed_regressions %}
No Regressions Detected
All metrics look stable between these two jobs
{% else %}
No Significant Regressions
{{ suppressed_regressions|length }} low-signal issue(s) suppressed
Suppressed Issues
{% for reg in suppressed_regressions %}
{% if reg.original_severity == 'critical' %}🔴{% else %}🟡{% endif %}
{{ reg.message }} {{ reg.host_label }}
{{ reg.metric }}{{ reg.suppression_reason }}
{% endfor %}
{% endif %}
{% for host_id in common_hosts %}

Global Status (Numeric Diff)

{% set status_diff = comparisons[host_id].global_status %} {% if status_diff %}
{% for row in status_diff %} {% endfor %}
Metric Job A{% if job_a.name %}: {{ job_a.name }}{% endif %} Job B{% if job_b.name %}: {{ job_b.name }}{% endif %} Delta
{{ row.metric }} {{ "{:,}".format(row.value_a) }} {{ "{:,}".format(row.value_b) }} {% if row.delta > 0 %}+{% endif %}{{ "{:,}".format(row.delta) }}
{% else %}

No global status data available for comparison.

{% endif %}

Processlist Summary

{% set pl_diff = comparisons[host_id].processlist %} {% if pl_diff %}
{% for key, data in pl_diff.items() %}
{% if key == 'total' %}Total Queries {% elif key == 'long_running' %}Time > 10s {% elif key == 'with_state' %}With State {% elif key == 'distinct_users' %}Distinct Users {% endif %}
{{ data.value_b }} {% if data.delta > 0 %}+{% endif %}{{ data.delta }}
Job A{% if job_a.name %} ({{ job_a.name }}){% endif %}: {{ data.value_a }}
{% endfor %}
{% else %}

No processlist data available for comparison.

{% endif %}

Buffer Pool

{% set bp_diff = comparisons[host_id].buffer_pool %} {% if bp_diff %}
{% if bp_diff.pool_size_gb %} {% endif %} {% if bp_diff.used_percent %} {% endif %} {% if bp_diff.hit_ratio %} {% endif %} {% if bp_diff.dirty_percent %} {% endif %} {% if bp_diff.health %} {% endif %}
Metric Job A Job B Change
Pool Size {{ bp_diff.pool_size_gb.value_a }} GB {{ bp_diff.pool_size_gb.value_b }} GB {% if bp_diff.pool_size_gb.delta != 0 %}{{ '+' if bp_diff.pool_size_gb.delta > 0 else '' }}{{ bp_diff.pool_size_gb.delta }} GB{% else %}—{% endif %}
Utilization {{ bp_diff.used_percent.value_a }}% {{ bp_diff.used_percent.value_b }}% {% if bp_diff.used_percent.delta != 0 %}{{ '+' if bp_diff.used_percent.delta > 0 else '' }}{{ bp_diff.used_percent.delta }}%{% else %}—{% endif %}
Hit Ratio (higher = better) {{ bp_diff.hit_ratio.value_a }}% {{ bp_diff.hit_ratio.value_b }}% {% if bp_diff.hit_ratio.delta != 0 %} {{ '+' if bp_diff.hit_ratio.delta > 0 else '' }}{{ bp_diff.hit_ratio.delta }}% {% if bp_diff.hit_ratio.direction == 'regression' %}↓{% elif bp_diff.hit_ratio.direction == 'improvement' %}↑{% endif %} {% else %}—{% endif %}
Dirty Pages (lower = better) {{ bp_diff.dirty_percent.value_a }}% {{ bp_diff.dirty_percent.value_b }}% {% if bp_diff.dirty_percent.delta != 0 %}{{ '+' if bp_diff.dirty_percent.delta > 0 else '' }}{{ bp_diff.dirty_percent.delta }}%{% else %}—{% endif %}
Health Status {{ bp_diff.health.value_a | capitalize }} {{ bp_diff.health.value_b | capitalize }} {% if bp_diff.health.changed %} Changed {% else %} {% endif %}
{% else %}

No buffer pool data available for comparison.

{% endif %}
{% set config_diff = comparisons[host_id].config %} {% set changed_count = config_diff|selectattr('changed')|list|length if config_diff else 0 %}

Config Variables {% if config_diff %} {% if changed_count > 0 %} {{ changed_count }} changed {% else %} No changes {% endif %} {% endif %}

{% if config_diff and changed_count > 0 %}
{% endif %}
{% if config_diff %}
{% for row in config_diff %} {% endfor %}
Variable Job A{% if job_a.name %}: {{ job_a.name }}{% endif %} Job B{% if job_b.name %}: {{ job_b.name }}{% endif %}
{% if row.changed %}{% endif %} {{ row.variable }} {{ row.value_a }} {{ row.value_b }}
{% else %}

No config data available for comparison.

{% endif %}

InnoDB Status (Text Diff)

{% set innodb_diff = comparisons[host_id].innodb %} {% if innodb_diff %}
{% for line in innodb_diff %}
{% if line.type == 'added' %}+{% elif line.type == 'removed' %}-{% else %} {% endif %}{{ line.line }}
{% endfor %}
{% else %}

No InnoDB status data available for comparison.

{% endif %}
{% endfor %}
Decrease (improvement)
Increase (regression)
No change
{% endif %}
{% endblock %}