{% macro donut(label, pct, subtitle, value_text=None) %}
{% set p = pct if pct is not none else 0 %}
{% if p < 0 %}{% set p=0 %}{% endif %} {% if p> 100 %}{% set p = 100 %}{% endif %}
{# severity color #}
{% if p < 60 %} {% set col="#16a34a" %} {# green #} {% elif p < 85 %} {% set col="#f59e0b" %} {# amber #} {% else %}
{% set col="#ef4444" %} {# red #} {% endif %} {% set r=24 %} {% set stroke=10 %} {% set c=2 * 3.1415926 * r %}
{% set dash=(p / 100.0) * c %} {% set txt=value_text if value_text else (p|round(0) ~ "%" ) %}
{# small dot marker at end (nice touch) #}
{% set angle = (p/100.0) * 2 * 3.1415926 - (3.1415926/2) %}
{% set cx = 36 + r * (angle|float|cos) %}
{% set cy = 36 + r * (angle|float|sin) %}
{{ label }}
live
{{ subtitle }}
{# bar meter for quick scan #}
{% endmacro %}
Live usage
{{ donut("CPU", data.gauges.cpu_total_pct, "Sum of container CPU% (clamped)") }}
{{ donut("RAM", data.gauges.ram_pct, "All containers vs host RAM", (data.gauges.ram_used_h ~ " / " ~
data.gauges.ram_total_h)) }}
{{ donut("Docker disk", data.gauges.docker_images_pct, "Images used vs total store") }}