{% for g in data.generations|sort(reverse=True) %}
{{ g }}
{{ data.generations[g]['str'] }}
{% for t in data.tiers|sort %}
{% if g in data.builders and t in data.builders[g]['tiers'] %}
{% set d = data.builders[g]['tiers'][t]['DONE'] %}
{% set b = data.builders[g]['tiers'][t]['BUILD'] + data.builders[g]['tiers'][t]['none']
+ data.builders[g]['tiers'][t]['IDLE'] + data.builders[g]['tiers'][t]['FAILURE'] %}
{% set s = b + d if b + d > 0 else 1 %}
{% endif %}
{% if t in data.generations[g]['tiers'] %}
{% for shard in data.generations[g]['tiers'][t] %}
{% set state = data.generations[g]['tiers'][t][shard] %}
{{ shard }}
{% for s, c in [('building', 'primary'), ('dead', 'danger'), ('idle', 'default'), ('prepared', 'success'), ('failed', 'warning')] %}
{% for h in state[s] %}
{{ h['host'] }}:{{ h['port'] }}
{% endfor %}
{% endfor %}