{% from "utils.html" import link %} {% macro collapsible_li(starts_open, title_left, title_right) %}
  • {{ caller() }}
  • {% endmacro %} {% macro resource_cost_table(cost_breakdown) %} {% for resource_cost in cost_breakdown %} {% endfor %}
    {{ resource_cost['resource'] }} {{ resource_cost['cost'] }}
    {% endmacro %} {% macro kv_table(items) %} {% for k, v in items.items() %} {% endfor %}
    {{ k }} {{ v }}
    {% endmacro %} {% macro status_display_row(status_name, count, state_value, base_path, batch_id) %} {{ status_name }}
    {{ count }} {% if count > 0 %} filter_alt filter_alt_off {% endif %}
    {% endmacro %} {% macro incomplete_status_row(count, base_path, batch_id) %} Incomplete (Blocked, Queued or Running)
    {{ count }} {% if count > 0 %} filter_alt filter_alt_off {% endif %}
    {% endmacro %} {% macro job_status_table(batch, base_path) %} {{ incomplete_status_row(batch['n_jobs'] - batch['n_completed'] - (batch['n_running'] or 0), base_path, batch['id']) }} {{ status_display_row('Succeeded', batch['n_succeeded'], 'success', base_path, batch['id']) }} {{ status_display_row('Failure or error', batch['n_failed'], 'bad', base_path, batch['id']) }} {{ status_display_row('Cancelled', batch['n_cancelled'], 'cancelled', base_path, batch['id']) }}
    {% endmacro %}